首先要明确,集合表明了一组对象(和数组同样,但数组长度不能变,而集合能)。Java中的集合框架定义了一套规范,用来表示、操做集合,使具体操做与实现细节解耦。html
其实说白了,能够把一个集合当作一个微型数据库,操做不外乎“增删改查”四种操做,咱们在学习使用一个具体的集合类时,须要把这四个操做的时空复杂度
弄清楚了,基本上就能够说掌握这个类了。java
主要理念用一句话归纳就是:提供一套“小而美”的API。API须要对程序员友好,增长新功能时能让程序员们快速上手。
为了保证核心接口足够小,最顶层的接口(也就是Collection与Map接口)并不会区分该集合是否可变(mutability),是否可更改(modifiability),是否可改变大小(resizability)这些细微的差异。相反,一些操做是可选的,在实现时抛出UnsupportedOperationException
便可表示集合不支持该操做。集合的实现者必须在文档中声明那些操做是不支持的。程序员
为了保证最顶层的核心接口足够小,它们只能包含下面状况下的方法:数据库
基本操做,像以前说的“增删改查”api
There is a compelling performance reason why an important implementation would want to override it.数组
此外,全部的集合类都必须能提供友好的交互操做,这包括没有继承Collection
类的数组对象。所以,框架提供一套方法,让集合类与数组能够相互转化,而且能够把Map
看做成集合。oracle
在集合框架的类继承体系中,最顶层有两个接口:app
Collection
表示一组纯数据框架
Map
表示一组key-value对ide
通常继承自Collection
或Map
的集合类,会提供两个“标准”的构造函数:
没有参数的构造函数,建立一个空的集合类
有一个类型与基类(Collection
或Map
)相同的构造函数,建立一个与给定参数具备相同元素的新集合类
由于接口中不能包含构造函数,因此上面这两个构造函数的约定并非强制性的,可是在目前的集合框架中,全部继承自Collection
或Map
的子类都遵循这一约定。
java-collection-hierarchy
如上图所示,Collection类主要有三个接口:
Set
表示不容许有重复元素的集合(A collection that contains no duplicate elements)
List
表示容许有重复元素的集合(An ordered collection (also known as a sequence))
Queue
JDK1.5新增,与上面两个集合类主要是的区分在于Queue
主要用于存储数据,而不是处理数据。(A collection designed for holding elements prior to processing.)
MapClassHierarchy
Map并非一个真正意义上的集合(are not true collections),可是这个接口提供了三种“集合视角”(collection views ),使得能够像操做集合同样操做它们,具体以下:
把map的内容看做key的集合(map’s contents to be viewed as a set of keys)
把map的内容看做value的集合(map’s contents to be viewed as a collection of values)
把map的内容看做key-value映射的集合(map’s contents to be viewed as a set of key-value mappings)
今天先开个头,后面会陆陆续续来一系列干货,Stay Tuned。
须要说明一点,从此全部源码分析都将基于Oracle JDK 1.7.0_71,请知悉。