Java中的容器

Java中的容器上图所示(网上找的)的为java中容器的一个大致的关系,当然还有其他许多接口和抽象类之类的,具体可以看源码。

Collection一族
java容器中在最上层的接口是Iterable接口,在上图中未画出来,Collection继承自他,他里面最重要的就是一个iterator()方法,返回一个实现了iterator接口的对象,用于依次访问集合中的元素。
Java中的容器
Java中的容器
在Collection接口中定义了一系列的抽象方法,也基本属于容器中的一般方法,比如添加元素,删除元素,是否为空之类的方法。
Java中的容器在Collection接口下有三大重要的接口,分别是Lsit,Set,Queue接口。

Set译为集合,在Set中的元素是无序的(例如是按顺序加进去的,但打印出来并不是加进去的那个顺序),且是不可重复的。
Set的实现有HashSet和TreeSet,虽然这样说也没有什么问题,但其中的继承实现关系要比这个复杂,HashSet和TreeSet继承了抽象类AbstractSet,而AbstractSet实现了Set接口继承了一个叫AbstractCollection的抽象类。List和Queue也是如此,大家可以查看源码,但记住HashSet和TreeSet出自Set也可以了。

List容器中的元素有顺序,可以重复。List容器中的元素都对应一个整型序号记载着其在容器中的位置,称为索引。List有两个重要的实现:ArrayList和LinkedList。ArrayList是以数组的方式来存储数据的,所以它能够根据索引快速的访问元素,但它删除和增加元素就很慢,因为当删除一个元素时,它后面的所有元素都要向前移动一格,就会导致很耗时间,增加元素也是如此。LinkedList使用链表来存储数据的,他对元素的随机访问会比较耗时,因为当访问中间的一个元素时,他必须从第一个开始,一个一个往后查找,但是他能快速的删除和增加,每个节点有一个对上一个节点和下一个节点的索引,当删除一个元素时,例如删除B,就只要把C对B的索引改为对A的,A对下一个节点的索引改成对C就可以了。
Java中的容器
Queue(队列):是一个满足“先进先出”的数据结构。
LinkedList提供了方法支持队列操作,并实现了Queue接口(实际为实现Deque接口,Deque继承了Queue),所以LinkedList是队列的一种实现。

Map一族
Map是一个存储键值对的容器,大家查看源码的时候会发现有两个Map,一个是类(在package javax.swing.text.html),一个是接口(在package java.util),Map类源码对他的描述为:map用于表示作为HTML文档一部分的map元素。这里我们说的是接口Map。
Map接口的作用和Collection接口差不多,也定义了一些添加删除的方法,如下
Java中的容器
Map族中比较常见的类有TreeMap和HashMap,TreeMap和HashMap都继承了AbstractMap,AbstractMap实现了Map。HashMap提供了key-value的键值对的数据存储机制,可以很方便的通过键值查找相应的元素,而且通过Hash散列机制,查找很方便。