JAVA容器
咱们学习容器的时候用最原始的分析方式java
1. 有啥没啥 ,数组
2. 啥是啥 ,
数据结构
3. 啥能干啥,学习
4. 啥和啥有啥关系spa
这里再容器的介绍这一篇文章主要讲的是有啥没啥.net
java容器能够分为三类:
1.List 线性表,在数据结构中,线性表有两种实现方式,一种是数组实现,另外一种是用链表来实现
code
2.Set 一个没有重复元素的集合,集合中元素没有顺序,能够存在空值。
对象
3.Map 键值对的集合,一个键对应一个value,存取速度很快。blog
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 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包里面的集合类暂时不去考虑,后续会一点一点的补充进来。
总之,咱们平时常用的集合继承关系已经说明清楚了,后续在个人博客中会慢慢对每个接口,超类,具体实现类作一个详细的叙述。