转载请注明原文地址: https://www.cnblogs.com/ygj0930/p/13556297.html
一:宏观框架
Java集合包,位于java.util.*下,主要包括4大部分:Collection集合接口及其实现类、Map映射接口及其实现类、集合迭代接口及其实现类、集合常用操作封装工具类。
注意:Java集合包中目前保留常用的类都是“非线程安全”的,只适用于单线程。其中遗留的几个线程安全的类实现都已过时,不再推荐使用,而是使用JUC包下对应的集合类。
二:Collection集合接口及其实现类
Collection集合包含 List和Set两大分支。
1、List是一个有序序列,每一个元素都有它的唯一索引,第一个元素的索引下标是0。
List的实现类主要有: LinkedList, ArrayList, Vector, Stack。
(01) LinkedList是链表实现的;它不是线程安全的,只适用于单线程。
(02) ArrayList是数组实现的,它是一个动态数组;它也不是线程安全的,只适用于单线程。
以下两个已过时:
(03) Vector是数组实现的矢量队列,它也一个动态数组;不过和ArrayList不同的是,Vector是线程安全的,它支持并发。但是不推荐使用,而是使用ArrayList对应高并发类 CopyOnWriteArrayList
(04) Stack是Vector实现的栈;和Vector一样,它也是线程安全的。但是不推荐使用,而是使用LinkedBlockingDeque。
2、Set是一个不允许有重复元素的集合。
Set的实现类有HastSet和TreeSet。
(01) HashSet是一个没有重复元素的集合,它底层通过HashMap实现的;HashSet不是线程安全的,只适用于单线程。
(02) TreeSet也是一个没有重复元素的集合,不过和HashSet不同的是,TreeSet中的元素是有序的;它是通过TreeMap实现的;TreeSet也不是线程安全的,只适用于单线程。
三:Map映射接口及其实现类
Map是一个映射接口,即key-value键值对。Map中的每一个元素都包含了“一个key”和“key对应的value”,以及key的hash值等其他内容。
Map的实现类主要有: HashMap,TreeMap、WeakHashMap, Hashtable。
(01) HashMap是存储“键-值对”的哈希表;它不是线程安全的,只适用于单线程。
(02) TreeMap也是哈希表,不过TreeMap中的“键-值对”是有序的,它是通过R-B Tree(红黑树)实现的;TreeMap不是线程安全的,只适用于单线程。
(03) WeakHashMap是也是哈希表;和HashMap不同的是,HashMap的“键”是强引用类型,而WeakHashMap的“键”是弱引用类型,也就是说当WeakHashMap 中的某个值引用不再正常使用时[变成弱引用],则键值对会被从WeakHashMap中被自动移除,值引用指向的对象也会被回收。WeakHashMap也不是线程安全的,只适用于单线程。
以下Map已过时:
(04) HashTable也是哈希表;和HashMap不同的是,HashTable是线程安全的,支持并发。但是不推荐使用,而是使用ConcurrentHashMap。
四:集合迭代接口及其实现类
集合迭代有两种方式:Iterator和Enumeration,其中Enumeration已过时。
1、Enumeration
Enumeration只能在Hashtable, Vector, Stack中使用,功能要比Iterator少,已过时。
package java.util;
public interface Enumeration<E> {
boolean hasMoreElements();
E nextElement();
}
2、Iterator
支持fail-fast机制:当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast异常。
package java.util;
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
Iterator 比 Enumeration 的遍历速度稍慢一些,因为Iterator添加了对fail-fast机制的支持,所以慢一些。
五:集合常用操作封装工具类
1、Arrays
针对最常用的数组操作提供方法封装支持。
2、Collections
包含各种有关集合操作的静态方法。