Java-Collections.jpeg
主要分为:List、Set、Map、Queue

List

存储顺序有序、可重复

  1. ArrayList:动态数组,大小可变,线程不安全,支持随机访问(RandomAccess)
  2. Vector:线程安全版ArrayList,一般不用,而使用并发包JUC下的CopyOnWriteArrayList,每次扩容请求其大小的2倍,而ArrayList为1.5倍
  3. LinkedList:基于双向链表实现,只能顺序访问,可快速插入删除元素。LinkedList还可以用作栈、队列和双向队列。

Set

  1. TreeSet:基于红黑树实现,支持有序性操作(例如根据一个范围查找元素),查找效率不如HashSet(HashSet为O(1),TreeSet为O(logN))
  2. HashSet:基于Hash表实现,支持快速查找,但丢失了有序性操作,且使用Iterator遍历Set的顺序是不确定的。
  3. LinkedHashSet:具有HashSet的查找效率,且使用一个双向链表维护插入顺序。

Map

  1. TreeMap:基于红黑树实现。
  2. HashMap:基于哈希表实现。
  3. HashTable:线程安全类HashMap,遗留类,推荐使用ConcurrentHashMap。
  4. LinkedHashMap:使用双向链表来维护元素的顺序,顺序为插入顺序或者LRU顺序。

Queue

  1. LinkedList:可以用它来实现双向队列。
  2. PriorityQueue:基于堆来实现,用来实现优先队列。

Iterator迭代器

  1. public interface Iterator<E>{
  2. //集合中是否还有元素
  3. boolean hasNext();
  4. //获得集合中的下一个元素
  5. E Next();
  6. }

迭代器(设计模式的一种),迭代器可以对集合进行遍历。

因每个集合内部的数据结构可能是不尽相同,而迭代器接口定义了统一使用hasNext()next()方法,这样做提供了一种方法访问一个容器,而不需要暴露该对象的内部细节。

迭代器安全的原因:当遍历的集合元素被更改的时候,会抛出ConcurrentModificationException异常。