Skip to content

Commit dcc1fad

Browse files
authored
Update 集合框架面试知识点.md
1 parent 79e6952 commit dcc1fad

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

docs/集合框架面试知识点.md

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# 集合框架面试题和解析
22

3+
**为什么要设计出迭代器**
4+
5+
迭代器本质是一种设计模式,为了解决为不同的集合类提供统一的遍历操作接口。
6+
37
## List、Set、Map 之间的区别
48

59
**List**
@@ -63,19 +67,31 @@
6367

6468

6569

66-
## HashMap的实现原理
70+
## 说说 HashMap
71+
72+
1.内部存储结构:数组+链表+红黑树(JDK8)
73+
74+
2.默认容量16(数组长度),默认装载因子0.75。
75+
76+
3.key 和 value 对数据类型的要求都是泛型。
6777

68-
数组+链表+红黑树实现。详见java容器总结篇。
78+
4.key 可以为 null,放在 table[0] 中。
79+
80+
5.hashcode:计算键的hashcode作为存储键信息的数组下标用于查找键对象的存储位置。equals:HashMap 使用 equals() 判断当前的键是否与表中存在的键相同。
6981

7082
## HashMap 的长度为什么是2的幂次方
7183

7284
HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就在把数据存到哪个链表中的算法;这个算法实际就是取模,hash%length,计算机中直接求余效率不如位移运算,源码中做了优化hash&(length-1),
7385

7486
**hash%length==hash&(length-1)的前提是 length 是2的 n 次方;**
7587

76-
## 在 Queue 中 poll()和 remove()有什么区别?
88+
## HashMap 1.7和1.8版本区别
7789

78-
poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。
90+
* **数据结构:**1.7:数组+链表,1.8:数组+链表+红黑树
91+
* **新节点插入方式:**1.7:头插法 ,1.8:直接在尾部插入
92+
* **扰动运算次数:**1.7:运算多,1.8:运算少
93+
* **插入和扩容的判断:**1.7:先扩容后插入,1.8:先插入后扩容
94+
* 为什么?1.8增加了判断是否为红黑树节点,先扩容的话不知道到底扩链表节点还是红黑树。
7995

8096
## ConcurrentHashMap线程安全的实现方式
8197

@@ -116,5 +132,6 @@ String、Integer等包装类的特性能够保证Hash值的不可更改性和计
116132

117133
Java.util.concurrent.BlockingQueue是一个队列,在进行检索或移除一个元素的时候,它会等待队列变为非空;当在添加一个元素时,它会等待队列中的可用空间。BlockingQueue接口是Java集合框架的一部分,主要用于实现生产者-消费者模式。我们不需要担心等待生产者有可用的空间,或消费者有可用的对象,因为它都在BlockingQueue的实现类中被处理了。Java提供了集中BlockingQueue的实现,比如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue,、SynchronousQueue等。
118134

135+
## 在 Queue 中 poll()和 remove()有什么区别?
119136

120-
137+
poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。

0 commit comments

Comments
 (0)