看了些源码了,该把这个集合间的关系缕清了。祭出网上流传已久的java集合关系类图
一、集合关系类图
二、相关的接口和类
1.Iterable接口 :进行集合中数据的遍历。
Iterator<T> iterator();//生成集合数据对应的迭代器
/**
从jdk1.8开始出现的接口,在集合中元素遍历过程中
进行一些自定义操作
*/
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
/**
Spliterator(splitable iterator可分割迭代器)接口是Java为了并行遍历数据源中的元素而设计的迭代器
*/
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
1.1 ListIterator,继承自Iterable接口。
作用:(1)允许我们向前、向后两个方向遍历 List。
(2)在遍历时修改 List 的元素
(3)遍历时获取迭代器当前游标所在位置
这个接口一般用于集合元素有序情况下的迭代。
List的所有子类都实现了这个接口
2.Collection接口
它是Queue、List、Set接口的父接口,同时继承自Iterable接口。声明了集合需要的各种基本方法。
2.1 List接口, List接口继承自Collection。存储的是一系列可以重复的按照顺序排列的数据元素的集合
它派生出来的两个常用子类
LinkedList:数据通过链表形式连接起来的元素集合
ArrayList: 通过数组的形式存储元素的集合。
两者的区别:LinkedList对于元素的增删较为方便,ArrayList对于集合的随机访问比较方便。
所以随机访问频繁用ArrayList,增删频繁使用LinkedList
另外 LinkedList还是Queue接口的实现类。
List还有另外一个子类->Vector :类似于ArrayList,都适合于元素的随机存储。但是ArrayList的非线程安全的,Vector是线程安全的。Vector的效率更低。
2.2 Queue接口
继承自Collection接口,是一个队列,满足先进先出的原则。LinkedList是它的一个实现。
2.3 Set接口
存储一系列不可以重复的元素集合。HashSet Set接口的实现类之一,底层是HashMap,存储的元素都是无序的。
LinkedHashSet 继承自HashSet,底层是LinkedHashMap,存储的元素是按照插入的顺序,
SortedSet 排列有序Set的集合
TreeSet SortedSet的实现类,底层是TreeMap,TreeMap的底层是通过红黑树来实现元素顺序的排列。
3.Map接口
存放Key,Value键值对的集合。
用于存储Key Value键值对的元素的集合。
它的实现类
HashMap:内部通过数组+链表的方式存储数据,便于数据的快速存储。
LinkedHashMap:继承自HashMap,满足HashMap的特性,并且元素可以按照插入顺序读取出来。
SortedMap: 抽象类,要求内部的元素都是有序排列
TreeMap:SortedMap的实现类,内部采用红黑树进行元素按序存储
4、AbstractList、AbstractMap、AbstractSet
对应于List、Map、Set的抽象实现,内部实现了通用的集合操作。这样其他具体的非抽象类就可以只关注需要修改或添加的方法实现即可,上面的具体实现类都继承了这个抽象类。