page contents
Nen
Nen - 程序员

性别: 天津 - 天津市 注册于 2021-06-23

向TA求助
2850金币数
43180 经验值
1个粉丝
主页被访问 6250 次

3096 个回答

0 赞同

Iterator 和 ListIterator 有什么区别?

Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向。ListIterator 实现了 Iterator 接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等等。

回答于 2022-01-21 14:12

0 赞同

Iterator 和 Enumeration 接口的区别?

与 Enumeration 相比,Iterator 更加安全,因为当一个集合正在被遍历的时候,它会阻止其它线程去修改集合。否则会抛出 ConcurrentModificationException 异常。这其实就是 fail-fast 机制。具体区别有三点: Iterator 的方法名比 Enumeration 更科学; Iterator 有 fail-fast 机制,比 Enumeration 更安全; Iterator 能...

回答于 2022-01-21 14:12

0 赞同

fail-fast 与 fail-safe 有什么区别?

Iterator 的 fail-fast 属性与当前的集合共同起作用,因此它不会受到集合中任何改动的影响。Java.util 包中的所有集合类都被设计为 fail-fast 的,而 java.util.concurrent 中的集合类都为 fail-safe 的。当检测到正在遍历的集合的结构被改变时,fail-fast 迭代器抛出ConcurrentModificationException,而 fail-safe 迭代器...

回答于 2022-01-21 14:11

0 赞同

Collection 和 Collections 有什么区别?

Collection:是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素。它的直接继承接口有 List,Set 和 Queue。 Collections:是不属于 Java 的集合框架的,它是集合类的一个工具类/帮助类。此类不能被实例化, 服务于 Java 的 Collection 框架。它包含有关集合操作的静态多态方法,实现对各种集合...

回答于 2022-01-21 14:11

0 赞同

线程和进程的区别?

进程:是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。 线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执...

回答于 2022-01-21 14:10

0 赞同

守护线程是什么?

守护线程(即 Daemon thread),是个服务线程,准确地来说就是服务其他的线程

回答于 2022-01-21 14:09

0 赞同

HashMap 的 get 方法的执行过程?

通过 key 的 hash 值找到在 table 数组中的索引处的 Entry,然后返回该 key 对应的 value 即可。 在这里能够根据 key 快速的取到 value 除了和 HashMap 的数据结构密不可分外,还和 Entry 有莫大的关系。HashMap 在存储过程中并没有将 key,value 分开来存储,而是当做一个整体 key-value 来处理的,这个整体就是Entry 对...

回答于 2022-01-20 14:49

0 赞同

HashMap 的 resize 方法的执行过程?

第一次调用 HashMap 的 put 方法时,会调用 resize 方法对 table 数组进行初始化,如果不传入指定值,默认大小为 16。 扩容时会调用 resize,即 size > threshold 时,table 数组大小翻倍。 每次扩容之后容量都是翻倍。扩容后要将原数组中的所有元素找到在新数组中合适的位置。 当我们把 table[i] 位置的所有 Node 迁...

回答于 2022-01-20 14:48

0 赞同

HashMap 的 size 为什么必须是 2 的整数次方?

1. 这样做总是能够保证 HashMap 的底层数组长度为 2 的 n 次方。当 length 为 2 的 n 次方时,h & (length – 1) 就相当于对 length 取模,而且速度比直接取模快得多,这是 HashMap 在速度上的一个优化。而且每次扩容时都是翻倍。 2. 如果 length 为 2 的次幂,则 length – 1 转化为二进制必定是 11111……的形式,在与 h...

回答于 2022-01-20 14:47

0 赞同

HashMap 多线程死循环问题?

主要是多线程同时 put 时,如果同时触发了 rehash 操作,会导致 HashMap 中的链表中出现循环节点,进而使得后面 get 的时候,会死循环。

回答于 2022-01-20 14:38