Java基础之有容乃大篇(容器篇 - 继承关系)

JAVA容器

   我们学习容器的时候用最原始的分析方式

        1. 有啥没啥 ,

        2. 啥是啥 ,

        3. 啥能干啥,

        4. 啥和啥有啥关系

    这里再容器的介绍这一篇文章主要讲的是有啥没啥

     java容器可以分为三类:

        1.List    线性表,在数据结构中,线性表有两种实现方式,一种是数组实现,另一种是用链表来实现

        2.Set    一个没有重复元素的集合,集合中元素没有顺序,可以存在空值。

        3.Map   键值对的集合,一个键对应一个value,存取速度很快。

    java容器List、Set的继承关系图:

Java基础之有容乃大篇(容器篇 - 继承关系)_第1张图片

介绍一下接口和超类:

先介绍接口:

    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继承关系图:

    Java基础之有容乃大篇(容器篇 - 继承关系)_第2张图片

    Map接口定义了源于Map的所有基本操作。

    Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。给出键和值,你就可以将值存储在Dictionary对象中。一旦该值被存储,就可以通过它的键来获取它。所以和Map一样, Dictionary 也可以作为一个键/值对列表。

    AbstractMap 是 Map 接口的的实现类之一,也是 HashMap, TreeMap, ConcurrentHashMap 等类的父类。AbstractMap 提供了 Map 的基本实现,使得我们以后要实现一个 Map 不用从头开始,只需要继承 AbstractMap, 然后按需求实现/重写对应方法即可。

    AbstarctMap 中唯一的抽象方法:

public abstract Set> entrySet();

    这里不详细的说明每一个类接口具体的一些方法和实现,后续会一点一点的慢慢梳理。

 java容器全部继承关系图:

Java基础之有容乃大篇(容器篇 - 继承关系)_第3张图片

   这里关于concrrent包里面的集合类暂时不去考虑,后续会一点一点的补充进来。

    总之,我们平时经常使用的集合继承关系已经说明清楚了,后续在我的博客中会慢慢对每一个接口,超类,具体实现类做一个详细的叙述。

你可能感兴趣的:(JAVA基础知识)