Collection:List/Set
List | 次序是List最重要的特点:它保证维护元素特定的顺序 |
---|---|
ArrayList | 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。其优点在于随机访问元素. |
LinkedList | 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。 |
Set | 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。 |
---|---|
HashSet | 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。 |
TreeSet | 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。 |
LinkedHashSet | 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。 |
Map:
Map | 维护“键值对”的关联性,使你可以通过“键”查找“值” |
---|---|
HashMap | Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。 |
TreeMap | 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树. |
LinkedHashMap | 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。 |
WeakHashMap | 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。 |
IdentifyHashMap | 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。 |
List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,如通过list.get(i)方式来获得List集合中的元素。
Set中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对象按特定方式排序,例如TreeSet类,它可以按照默认排序,也可以通过实现java.util.Comparator<Type>接口来自定义排序方式。
Map中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复。
另外vector和hashtable是线程安全的。
总结: List是有序可重复,set无序不重复,map的key也和set一样。如果想跟List一样需要有插入元素的顺序,请使用LinkedHashSet或者LinkedHashMap。