【Java源码分析】集合框架-Collections工具类-Arrays工具类

时间:2023-02-24 23:12:02

集合框架Collection 和Collections和Arrays工具类

一开始总是搞不清楚Collection和Collections的区别,不过看下代码应该很清楚,一个是接口,一个是工具类
Collection是集合类的上级接口,子接口主要有Set 和List、Map。平时用到的一些集合类都是该接口的间接实现类。
Collections是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态泛型方法实现对各种集合的搜索、排序、线程安全化等操作。如果对于一些排序算法或者一些集合操作的工具类的实现不是很熟悉,可以到这个帮助类里面找找灵感,比看书有意思多了而且还可以学习到简洁高效的代码风格。
Arrays和Collections的区别在于Arrays是一个线性表操作工具类这一点在Collections和Arrays的源码注释中可以看出,This class contains various methods for manipulating arrays (such as sorting and searching).而Collections中是This class consists exclusively of static methods that operate on or return collections.

Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,但是如果要用线程安全的结合类,首选Concurrent并发包下的对应的集合类。

Collection实现类的UML层次结构如下

【Java源码分析】集合框架-Collections工具类-Arrays工具类

【Java源码分析】集合框架-Collections工具类-Arrays工具类

集合主要实现类及继承关系

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set
|
│├HashSet

│├TreeSet

└Queue
|
│├LinkedList

│├PriorityQueue

Map

├Hashtable

├HashMap

└TreeMap

除了上述的Queue List Set Map以及两个工具类之外,集合框架中还有一个最常用的部分就是迭代器Iterator.集合框架主要学习部分也就是这4类集合实现以及迭代器和这两个工具类

List接口通常表示一个列表,主要存放一些有序元素。元素可以重复,常用实现类为ArrayList和LinkedList,Vector。另外,LinkedList还是实现了Queue接口,因此也可以作为队列使用。

Set接口通常表示一个集合,其中的元素不允许重复(放入set中的元素通常都需要复写hashCode()和equals()方法)。常用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,而TreeSet是通过Map中的TreeMap实现的。另外,TreeSet还实现了SortedSet接口,因此是有序的集合(需要额外的实现Comparable接口实现排序的比较规则)。

Map接口是一个映射接口,其中的每个元素都是一个key-value键值对。抽象类AbstractMap通过适配器模式实现了Map接口中的大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,HashTable直接实现了Map接口。

Queue接口是一个队列接口,用的比较少,而且其实现类LinkedList也实现了List接口。

Iterator是遍历集合的迭代器,不能遍历Map,只用来遍历Collection。

集合接口的主要实现类之间的对比

【Java源码分析】集合框架-Collections工具类-Arrays工具类

在线程安全性方面List中只有Vertor是线程安全的,Map中只有HashTable是线程安全的,如果想要使用线程安全的集合,一方面可以通过Collections帮助类另外一个方面是直接使用Concurrent包下面的线程安全集合。