Collection 接口:
Set, List ,都继承了Collection;
Set接口实现类:(元素唯一性) --------Thinking Java Pg 477
HashSet : 效率高,内部由快速查找设计的,优势主要体现在添加和查询;
TreeSet : 保持有序的序列,底层为树结构, 迭代要比HashSet快,元素必须实现compareble接口;
LinkedHashSet : 效率高,并且保持了有序的序列;但是它的效率还是没有HashSet高,内部用链表维护元素的次序;
List接口实现类:
ArrayList : List 接口的大小可变数组的实现。查询效率极快,实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现List 接口外,此类还提供一些方法来操作内部用来存储 列表的数组的大小。(此类大致上等同于Vector 类,除了此类是不同步的。)
注意:ArrayList 是线程不安全的,需要通过 List list = Collections.synchronizedList(new ArrayList(...));解决线程安全;
LinkedList: 是由双向链表实现的,在插入和删除元素时,使用LinkedList较合适, List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。除了实现List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈,队列。
Map 接口:(键值对) ---------Thinking Java Pg 485
HashMap : 线程不安全的,效率提高了,取代了HashTable,因为HashTable虽然是线程安全的,但是需要初始化容器和加载因子,大大影响其性能,所以被HashMap取代;
TreeMap : 基于黑树的实现,主要的特点是所得到的经过是经过排序的;
LinkedHashMap : 类似HashMap,但是迭代遍历它时,取得的“键值对”顺序为插入时的顺序,比HashMap效率慢一点,但是如果用迭代访问时反而更快,因为它使用了链表维护 了内部次序;
ConCurrentHashMap: 线程安全的,不涉及同步加锁;
注意: ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteArraySet 都是线程安全的,专门来处理线程安全问题;