集合框架
Java提供了一些能有效操作和组织数据的数据结构,这些数据结构通常被称为Java集合框架(Java Collections Framework)。Java集合框架支持两种类型的容器:
- 集合(Collection):存储元素集合。
- 图(Map):存储键/值对。 Java集合框架的类图如下所示:
Collection
Java集合框架支持三种类型的集合:List(线性表)、Set(规则集)、Queue(队列)。List中存储一个由元素构成的有序(有序指的是元素插入的顺序,不是大小顺序)集合;Set存储一组不重复的元素;Queue用先进先出的方式处理元素。这些集合的通用方法定义在接口中,而Collection接口是集合对象的根接口,其通用方法如下:
Collection接口继承了Iterable接口,实现了Iterable接口的类,都可以通过foreach循环对集合中的元素进行访问。
List
List定义了一系列对元素进行操作和访问的方法,接口中具体如下:
在JDK9之后,提供了一系列生成
List的静态方法,不过这些方法返回的对象只能对集合内的元素进行访问,不能进行修改,否则会抛出异常。List有以下实现类:
ArrayList:本质上是动态数组LinkedList:链表Vector:可以看成是线程安全的ArrayListStack:栈,继承自Vector,元素先进后出
Set
Set中不会有重复的元素,接口中定义的方法如下:
和
List类似,提供了一系列静态方法。Set有以下实现类:
HashSet:基于HashMap实现LinkedHashMap:继承HashSet,增加了能通过元素插入顺序进行访问的功能TreeSet:基于TreeMap实现 在JDK中,Set的实现类是基于Map的实现类来实现的,所以后面在分析具体实现的时候,会先介绍Map的实现类。
Queue
Queue中的元素先进先出,它提供了三种类型的操作,如下所示:
这三种操作的区别在于:
add/offer:添加元素到队列尾,如果是有界队列,当队列已满,add操作会抛出IllegalStateException异常remove/poll:返回并删除队列头部元素,如果队列为空,remove操作会抛出NoSuchElementException异常element/peek:返回但不删除队列头部元素,如果队列为空,element操作会抛出NoSuchElementException异常 它的实现类有:LinkedList:即是队列也是列表PriorityQueue:优先队列,基于堆实现ArrayDeque:基于数组实现的队列,通过head和tail两个下标达到重复利用空间的目的
Map
Map中存储的是键/值对,且不能有重复的键,每个键对应一个值,接口方法如下:
Map有如下实现类:
HashMap:底层是数组,利用hash算法使键均匀分布,通过链表和红黑树解决hash冲突LinkedHashMap:继承自HashMap,能够通过元素插入的顺序对元素进行访问TreeMap:基于红黑树实现,并通过键排序HashTable:通过synchronized关键字来保证线程安全