ArrayList | 一种可以动态增长和缩减的索引序列 |
---|---|
LinkedList | 一种可以在任何位置进行高效的插入和删除操作的有序序列 |
ArrayDeque | 一种可以循环数组实现的双端队列 |
HashSet | 一种没有重复元素的无序集合 |
TreeSet | 一种有序集合(PS:没有重复元素) |
EnumSet | 一种包含枚举类型的集合 |
LinkedHashSet | 一种可以记住元素插入次序的集合 |
PriorityQuerue | 一种允许高效删除最小元素的集合 |
HashMap | 一种存储键/值关联的数据结构 |
TreeMap | 一种键值有序排列的映射表 |
EnumMap | 一种键值属于枚举类型的映射表 |
LinkedHashMap | 一种可以记住键值项添加次序的映射表 |
WeakHashMap | 一种其值无用武之地后可以被垃圾回收器回收的映射表 |
IdentityHashMap | 一种用==而不是用equals比较键值的映射表 |
ArrayQueue 的初始化默认为16,插入效率介于linkedList 与ArrayList之间,基本中间值,删除效率接近ArrayList ,总体效率较高,其内删除等方法,从第一个开始操作。remove方法调用removeFirs操作,可以自行调用removeLast()方法,
其与LinkedList 共同继承Queue接口;
链表:Java程序设计语言中,所有 链表实际上都是双向链表(doubly linked),
链表与集合的重要区别:链表是一个有序的集合(ordered colleciton),由迭代器来负责add动作,(PS:只有对自然有序集合使用迭代器添加元素才有实际意义)。如Iterator中的子集ListIterator提供add方法,但其自身不提供,如set 为无序集合。
ListIterator接口中 提供了 next()向后遍历,以及previous()向前遍历方法,对应的各自hasNext()及hasPrevious()方法来判断是否有向后(前)元素;
List<String> demo = new LinkedList<>();
demo.add("S");
demo.add("T");
demo.add("R");
Iterator<String> iterator = demo.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
ListIterator中,add()方法只依赖迭代器的位置,而remove()方法依赖于迭代器的状态 。