线程安全的集合
- vector:就比arrayList多了个同步化机制,效率低
- statck:堆栈类,先进后出
- hashtable:就比hashmap多了个线程安全
- concurrenthashmap:CAS+synchronized
ArrlyList和LinkedList的区别
- ArrayList是动态数组的数据结构实现的,LinkedList是双向链表的数据结构实现的
- 随机访问效率:ArrayList比LinkedList的随机访问效率要高,因为LinkedList是线性的数据存储方式,需要从头到尾遍历
- 增加和删除效率:LinkedList要比ArrayList效率高,因为ArrayList增删操作要影响数组内其他数据的下标
- 内存空间占用:LinkedList更占用空间,除了存储数据,还存储了两个指向前后元素的引用
- 线程安全:都不是线程安全的
HashMap
数组+链表+红黑树(1.8之后)
-
数组hash后得到数组下标,把数据放到对应下标元素的链表上
-
当链表长度超过8之后会转为红黑树,查询效率从O(n)提升到O(logn)
-
2此扰动(一次位运算+一次异或运算)
-
扩容后的位置 = 原位置 or 原位置 + 旧容量
Node[] table 哈希通数组,继承Map.Entry
ConcurrentHashmap
如果node还没有初始化,就会调用CAS进行插入响应数据
如果当前node不为空,则对该节点加synchronized锁