Java集合架构

    Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。

Java集合类的整体框架如下:

其中

  • 实线和空心三角形表示继承关系
  • 虚线和空心三角形表示接口实现关系
  • 虚线和实心三角形表示依赖关系(一个类的方法操作另一个类的对象)

上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。

由上图可以很清楚的看到Java的容器类主要由两个接口派生而出:CollectionMap

 

    从上图中可以看出,集合类主要分为两大类:Collection和Map。

Collections和Arrays

Collection是容器层次结构中根接口。而Collections和Arrays是一个提供一些处理容器类静态方法的类。例如常用的Arrays.sort() Arrays.copy();方法等。

Collection体系 – Set,List,Queue (三个Interface)

Set

一个不包括重复元素(包括可变对象)的Collection,是一种无序的集合。如果a.equals(b),那么set里是不能同时包含a和b的,并且set里最多只能有一个null。

实现Set的有:

  • HashSet : 内部采用HashMap实现的
  • LinkedHashSet : 采用LinkedHashMap实现
  • TreeSet : 采用TreeMap实现

List:

一个有序的Collection(也称序列),元素可以重复。确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。

实现List的有:

  • ArrayList : 采用数组实现,适合随机查找,但不适合频繁增删
  • LinkedList : 链表实现,适合频繁增删,但不适合随机查找
  • Vector : 历史遗留产物,同步版的ArrayList(使用了synchronized方法)
  • Stack : 继承自Vector。Java里其实没有纯粹的Stack,可自己实现一个,封装一下LinkedList即可。

Queue

一种队列是双端队列,支持在头、尾两端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。另一种是阻塞式队列,队列满了以后再插入元素则会抛出异常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue。虽然接口并未定义阻塞方法,但是实现类扩展了此接口。

Map体系

Map:是一个键值对的集合。也就是说,一个映射不能包含重复的键,每个键最多映射到一个值。该接口取代了Dictionary抽象类。

实现map的有:

  • HashMap/HashTable : 和ArrayList一样采用数组实现,超过初始容量会对性能有损耗。
  • TreeMap : TreeMap中所有的元素都保持着某种固定的顺序
  • Properties : 继承的HashTable (用于配置文件)
原文地址:https://www.cnblogs.com/cascle/p/7213986.html