Java集合框架简介

179 阅读3分钟

集合框架

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:可以看成是线程安全的ArrayList
  • Stack:栈,继承自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关键字来保证线程安全

实现详解

ArrayList详解

LinkedList详解

Vector和Stack详解

HashMap详解