我们学习容器的时候用最原始的分析方式
1. 有啥没啥 ,
2. 啥是啥 ,
3. 啥能干啥,
4. 啥和啥有啥关系
这里再容器的介绍这一篇文章主要讲的是有啥没啥
1.List 线性表,在数据结构中,线性表有两种实现方式,一种是数组实现,另一种是用链表来实现
2.Set 一个没有重复元素的集合,集合中元素没有顺序,可以存在空值。
3.Map 键值对的集合,一个键对应一个value,存取速度很快。
java容器List、Set的继承关系图:
介绍一下接口和超类:
先介绍接口:
Iterable接口,容器中的顶级接口,接口中规定了一个迭代方法,iterator。
Collection接口,继承了Iterable的iterator方法,扩展了一些集合常用的方法,比如add,size,isEmpty,contains等集合
常用的方法,定义了集合最基本的方法。
List接口,继承了Collection,在集合的基础上特化出线性表的概念,定义了线性表常用的一些方法,get/set,add指定位置添
加,indexOf,lastIndexOf等方法。
我们都知道,线性表延伸出队列和栈:
1.队列Queue接口,继承了List,定义了队列的常用方法,offer,poll,peak等方法。
Deque接口是Queue接口的子接口,代表一个双端队列。同时Deque不仅可以作为双端队列使用,而且可以被当成栈来
使用,所以可以使用出栈,入栈的方法。
2.栈这里上图中没有画到栈的图,是因为我们围绕ArrayList和linkedList,HashSet,HashMap等常用集合来讲,简单说下
栈,栈继承了Vector,Vector继承了AbstractList超类。Vector是一个底层为数组实现的集合,平时我们不是很常用。
Set接口,继承了Collection,扩展了添加元素的方法,查找元素的方法,迭代方法和删除方法,方法不是很多。
Set主要有三个实现类:
1.HashSet 无序
2.LinkedHashSet 有序
3.TreeSet 有序
上面就画了两个,linkedHashSet我不经常用,所以也就没画。至于TreeSet继承NavigableSet,NavigableSet继承Sort
edSet,SortedSet定义了有序Set的方法,在SortedSet中元素一定是有序的,目前我知道的也只有TreeSet继承他。
NavigableSet扩展了 SortedSet,具有了为给定搜索目标报告最接近匹配项的导航方法。方法 lower、floor、ceiling 和
higher 分别返回小于、小于等于、大于等于、大于给定元素的元素,如果不存在这样的元素,则返回 null。
介绍超类:
上面的图超类主要有AbstractCollection,AbstractList,AbstractSet,AbstrackSequentialList。按照目前我的段位来理
解,超类对超类所实现的接口进行了一些具体化的实现方式,也有一些方法是留给子类去实现的。超类有很多我们拿出一个
来讲,AbstractCollection,它实现了一些方法,也定义了几个抽象方法留给子类实现,因此它是一个抽象类。
它有两个抽象方法
public abstract Iterator
public abstract int size();
这两个方法需要自己去是实现。他的add方法是这样的。
public boolean add(E object) {
throw new UnsupportedOperationException();
}
如果子类是一个可以添加元素的集合,必须重写add方法。保证集合是可以添加元素的。
剩下的一些方法AbstractCollection超类自己就实现了,另外它还重写了toString方法,这也是我们为什么能输出集合中元素的原因。
java容器Map继承关系图:
Map接口定义了源于Map的所有基本操作。
Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。给出键和值,你就可以将值存储在Dictionary对象中。一旦该值被存储,就可以通过它的键来获取它。所以和Map一样, Dictionary 也可以作为一个键/值对列表。
AbstractMap 是 Map 接口的的实现类之一,也是 HashMap, TreeMap, ConcurrentHashMap 等类的父类。AbstractMap 提供了 Map 的基本实现,使得我们以后要实现一个 Map 不用从头开始,只需要继承 AbstractMap, 然后按需求实现/重写对应方法即可。
AbstarctMap 中唯一的抽象方法:
public abstract Set> entrySet();
这里不详细的说明每一个类接口具体的一些方法和实现,后续会一点一点的慢慢梳理。
java容器全部继承关系图:
这里关于concrrent包里面的集合类暂时不去考虑,后续会一点一点的补充进来。
总之,我们平时经常使用的集合继承关系已经说明清楚了,后续在我的博客中会慢慢对每一个接口,超类,具体实现类做一个详细的叙述。