Java荟萃源码分解:Java荟萃框架
Java荟萃东西包位于Java.util包下,包括了许多常用的数据布局,如数组、链表、栈、行列、荟萃、哈希表等。进修Java荟萃框架下大抵可以分为如下五个部门:List列表、Set荟萃、Map映射、迭代器(Iterator、Enumeration)、东西类(Arrays、Collections)。
Java荟萃类的整体框架如下:
从上图中可以看出,荟萃类主要分为两大类:Collection和Map。
Collection是List、Set等荟萃高度抽象出来的接口,它包括了这些荟萃的根基操纵,它主要又分为两大部门:List和Set。
List接口凡是暗示一个列表(数组、行列、链表、栈等),个中的元素可以反复,常用实现类为ArrayList和LinkedList,别的尚有不常用的Vector。别的,LinkedList照旧实现了Queue接口,因此也可以作为行列利用。
本栏目
Set接口凡是暗示一个荟萃,个中的元素不答允反复(通过hashcode和equals函数担保),常用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,而TreeSet是通过Map中的TreeMap实现的。别的,TreeSet还实现了SortedSet接口,因此是有序的荟萃(荟萃中的元素要实现Comparable接口,并覆写Compartor函数才行)。
我们看到,抽象类AbstractCollection、AbstractList和AbstractSet别离实现了Collection、List和Set接口,这就是在Java荟萃框架顶用的许多的适配器设计模式,用这些抽象类去实现接口,在抽象类中实现接口中的若干或全部要领,这样下面的一些类只需直接担任该抽象类,并实现本身需要的要领即可,而不消实现接口中的全部抽象要领。
Map是一个映射接口,个中的每个元素都是一个key-value键值对,同样抽象类AbstractMap通过适配器模式实现了Map接口中的大部门函数,TreeMap、HashMap、WeakHashMap等实现类都通过担任AbstractMap来实现,别的,不常用的HashTable直接实现了Map接口,它和Vector都是JDK1.0就引入的荟萃类。
Iterator是遍历荟萃的迭代器(不能遍历Map,只用来遍历Collection),Collection的实现类都实现了iterator()函数,它返回一个Iterator工具,用来遍历荟萃,ListIterator则专门用来遍历List。而Enumeration则是JDK1.0时引入的,浸染与Iterator沟通,但它的成果比Iterator要少,它只能再Hashtable、Vector和Stack中利用。
Arrays和Collections是用来操纵数组、荟萃的两个东西类,譬喻在ArrayList和Vector中大量挪用了Arrays.Copyof()要领,而Collections中有许多静态要领可以返回各荟萃类的synchronized版本,即线程安详的版本,虽然了,假如要用线程安详的团结类,首选Concurrent并发包下的对应的荟萃类。