本系列文章将主要从源码角度分析和讲解Java集合框架的主要架构,各个类的实现和用法。一来可以帮助Java初学者更新的掌握Java集合类,二来可以让自己重新审视这些类的实现细节有助于提高自己的编程能力。
什么是集合框架?
集合框架是一个操作集合元素的一个统一的架构。主要包括一些内容:
接口 表示一个数据结构的抽象,统一定义相关操作方法
实现 具体数据结构的实现类
算法 实现数据结构用到的相关算法
首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。Java中的集合框架定义了一套规范,用来表示、操作集合,使具体操作与实现细节解耦。
其实说白了,可以把一个集合看成一个微型数据库,操作不外乎“增删改查”四种操作,我们在学习使用一个具体的集合类时,需要把这四个操作的时空复杂度弄清楚了,基本上就可以说掌握这个类了。
继承关系
如下图所示,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口
顶层接口
Iterator 一个迭代器,所有集合类提供 iterator 的实现 ,Iterator接口如下:
public interface Iterator {
boolean hasNext();
E next();
void remove(); //optional
}
Collection 所有接口的根接口,代表一组元素的集合。Java并没有提供这个接口直接的实现,而是提供了三个子接口
List 表示一个有序的集合(an ordered collection),允许有重复元素
Set 不允许有重复元素的集合
Queue 用于在处理之前保存多个元素的集合。提供了一些额外的insertion, extraction, and inspection 操作
Map 包含了key-value对。Map不能包含重复的key,但是可以包含相同的value 每个key包含最多一个Value值。
List接口
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢
实现类
ArrayList
LinedList
Set接口
实现类
HashSet
TreeSet
Map接口
实现类
HashMap
TreeMap
LinkedHashMap
实现集合接口的类一般遵循+的命名方式,通用的集合实现类如下表:
Interface
Hash Table
Resizable Array
Balanced Tree
Linked List
Hash Table + Linked List
Set
HashSet
TreeSet
LinkedHashSet
List
ArrayList
LinkedList
Deque
ArrayDeque
LinkedList
总结
有点仓促,后续会陆续分析具体类的源码实现。欢迎大家关注留言,如有错误之处请指正。
参考