ArrayList 可以添加 null 值吗?
ArrayList 的扩容机制
0 -- 10 --* 1.5
Set的3种实现类
- HashSet
- LinkHashSet(按照FIFO实现,底层是哈希表+双向链表)
- TreeSet(红黑树,自定义排序存储)
Queue的4个接口
quque
deque
priorityQueue
BlockingQueue
Map
HashMap 和 Hashtable 的区别
只需要知道HashTable是被淘汰了的CurrentHashMap
HashMap 和 HashSet 区别
HashSet直接调用的HashMap的方法(add = put,contains = containsKey等)
HashMap 和 TreeMap 区别
多了排序的功能
HashSet 如何检查重复?
HashMap
1、1.7和1.8的区别
3个:
红黑树
尾插法
扰动次数
2、hash的模为什么是2的幂次方?
- 越大越好
- 取模时 % == & 的前提是n为2的幂次方
3、扩容机制
- 超过64之后就不扩容了,改用链表和红黑树(每次扩容变为原来的2倍)
- 链表长度大于8时变为红黑树
- 扩容过程中,一个红黑树会被分为两半,预估每一半的长度,如果小于6就退化为链表
ConcurrentHashMap
1.7:
- 分段,默认16个段,把整个表分割为16个子Hash表,同时最多允许16个线程访问
- 拉链法,因此链表长度可能会很长。
- 使用悲观锁ReentrantLock
1.8:
- 舍弃分段的思想,每一个槽位都是一个独立的节点,并发量取决于有多少个槽位
- 红黑树,访问速度会变快
- 使用乐观锁CAS
ConcurrentHashMap迭代器是强一致性还是弱一致性?
为什么ConcurrentHashMap不能输入null?
什么是二义性混淆?
为什么单线程可以,多线程不行