List (列表): List的特征是其元素以线性方式存储,集合中可以存放重复对象。两种List, 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法;次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素;一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。 ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。使用ArrayList代替,还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法使得LinkedList可以当作堆栈、队列和双向队列使用。
Set(集) :Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。 HashSet 为快速查找设计的Set,TreeSet 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列,LinkedHashSet 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序),在使用迭代器遍历Set时,结果会按元素插入的次序显示。
Map(映射):Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。 标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。对每个元素保存一份,这是基于"键"的,Map也有内置的排序,如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap。HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。 Map 维护“键值对”的关联性,使你可以通过“键”查找“值”。LinkedHashMap 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。
总结:
1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个。
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。
5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value,HashMap会利用对象的hashCode来快速找到key。
6、Map中元素,可以将key序列、value序列单独抽取出来。使用keySet()抽取key序列,将map中的所有keys生成一个Set。使用values()抽取value序列,将map中的所有values生成一个Collection。为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。