Java主要容器类特点总结

接口

  • Collection 可以放入多个同类型的对象
  • List 继承Collection接口,容器内对象有序
  • Set 继承Collection接口,容器内对象不可重复
  • Queue 继承Collection接口,容器内对象有序,且实现了队列先进先出的特性
  • Deque 继承Queue接口,实现了双端队列
  • BlockingQueue 继承Queue接口,实现了阻塞式入队和出队
  • Map 实现key到value之间的映射

实现类

非线程安全

  • ArrayList 实现List接口,数据结构为动态扩容的对象数组
  • LinkedList 实现List接口和Deque接口,数据结构为双向链表
  • HashSet 实现Set接口,底层为HashMap
  • LinkedHashSet 继承HashSet,在HashSet的基础上维护一个元素的双向链表,链表的顺序为元素加入的先后顺序,底层为LinkedHashMap
  • TreeSet 实现SortedSet接口,元素根据比较规则有序,底层为TreeMap
  • ArrayQueue 实现Deque接口,数据结构为数组
  • PriorityQueue 实现Queue接口,元素出队顺序与优先级相关,底层是数据实现的二叉堆
  • HashMap 实现Map接口,数据结构为数组,数组的元素为链表(或在链表长度过长时变为红黑树),根据key的哈希值确定键值对存放在数组的哪个位置,再通过链表(或红黑树)解决哈希冲突
  • LinkedHashMap 继承HashMap,在HashMap的基础上维护一个键值对的双向链表,链表的顺序为键值对加入的先后顺序
  • TreeMap 实现SortedMap接口,键值对根据比较规则有序,数据结构为红黑树

线程安全

  • ConcurrentHashMap 实现Map接口,HashMap的高性能线程安全版本
  • CopyOnWriteArrayList 实现List接口,ArrayList的线程安全版本
  • ConcurrentLinkedQueue 实现Queue接口,数据结构为链表,出队和入队使用CAS算法,高性能,无界队列
  • ArrayBlockingQueue 实现BlockingQueue接口,可阻塞式出入队,数据结构为数组,出队和入队使用ReentrantLock,有界队列
  • LinkedBlockingQueue 实现BlockingQueue接口,可阻塞式出入队,数据结构为链表,出队和入队使用ReentrantLock,可有界可无界
  • PriorityBlockingQueue 实现BlockingQueue接口,可阻塞式出入队,PriorityQueue的线程安全版本
  • ConcurrentSkipListMap 实现Map接口,数据结构为跳表