JAVA基础——集合

111 阅读1分钟

线程安全的集合

  • 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锁