1 java集合框架
2 集合之List和Set
3 Map
4 HashMap 、HashTable、ConccurentHashMap的区别
HashMap(java8之前):数组+ 链表
性能恶化:从O(1)-O(n)
HashMap(java8之后):数组+ 链表+红黑树
HashMap:Put方法的逻辑
1.若HashMap未被初始化,则进行初始化操作。
2 对Key求Hash值,依据Hash值计算下标。
3 若未发生碰撞,直接放入桶中;
4 若发生了碰撞,则以链表的方式来连接到后面
5 若链表的长度超过阈值,且HashMap元素超过最低数化容量,则将链表转成红黑树。
6 若节点已经存在,则用新值替换旧值。
7 若桶满了(默认容量为16*扩容因子0.75),就需要resize(扩容2倍后重排)
HashTable:
1 早期java类库提供的哈希表的实现。
2 线程安全:涉及到修改HashTable的方法,使用synchronized修饰。
3 串行化的方式运行,性能较差。
ConccurentHashMap:
早期的ConccurentHashMap通过分段锁Segment来实现。
当前的ConccurentHashMap:CAS+synchronized使锁更加细化。
三者的区别
1 HashMap线程不安全,数组+ 链表+红黑树
2 Hashtable 线程安全,锁住整个对象,数值+ 链表
3 ConccurentHashMap 线程安全,CAS+同步锁,数组+链表+红黑树
4 hashMap的key、value均可为null,其他的两个类不支持。