概览

Java数据结构(容器)主要包含 collection 和 Map两种.

Collection

Set

Set是不允许重复的集合

  • TreeSet
  • HashSet
  • LinkedHashSet

List

List接口可以存储不唯一的有序的对象

  • ArrayList
  • Vector
  • LinkedList
  • Vector的子类Stack实现后进先出

Queue

  • LinkedList
  • PriorityQueue

Map

Map使用键值对,Key不能重复。

  • TreeMap
  • HashMap
  • HashTable
  • LinkedHashMap

具体特点

数组支持高效的随机元素访问(根据下标来随机访问)
链表不支持快速随机访问,但是插入删除效率高

ArrayList

底层使用的是Object数组
会预留一部分容量空间
ArrayList的扩容

LinkedList

底层使用的是双向链表
每一个元素都要存放两个指针

Vector

synchronised包裹ArrayList进行同步,是线程安全的

Collections. synchronizedList()

concurrent并发包下的CopyOnWriteArrayList

读写分离
写操作需要加锁,防止并发写入时导致写入数据丢失
写操作结束之后需要把原始数组指向新的复制数组
缺点在于内存占用翻倍,以及数据不一致

HashMap底层数据结构

数组+链表 从1.8开始,因为查找效率,引入了数组+红黑树(链表长度大于阈值默认为8)
二叉树和红黑树
红黑树是一种自平衡二叉树,区别于AVL树