Java集合【总目录,更新中...】

Java集合【总目录】

前言

2020年6月6日
  之前自己学习Java集合都是很笼统地学,知识点很零散,所以想开一个栏目,对自己的Java集合知识进行梳理展示,也供各位同学借鉴。如有错误之处,请各位不吝指教!

1.什么是Java集合?

Ⅰ、集合是一个存放数据的容器;
Ⅱ、集合的类型有三种,分别对应三种存放规则:
  List(列表):连续、有序地存放数据,
  Set(集):不可重复地存放数据,
  Map(映射):存放键值数据对key-value,key不可重复。

Java集合的结构图如下:
在这里插入图片描述

图中很详细地表示了各接口和类之间的关系,结合图和源码,我们可以看到,一些实现类会继承一个抽象类以及实现一个接口,如:
HashMap:

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{...}

ArrayList:

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{...}

HashSet:

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{...}

那它为什么不直接实现接口,还要多继承一个抽象类呢?
  我们将拥有同一特性的几个类的公共方法提取出来,放到一个抽象类中去,这就相当于给这些类设置了一个设计规范。
  比如:Set接口下的实现类都必须有add(添加),get(读取)、remove(删除)、clear(清空)等方法,那就先写一个AbstractSet抽象类存放这些方法,让所有Set的实现类都继承AbstractSet,然后再根据子类的需求看是否需要重写。

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
     protected AbstractList() {
    }

     public boolean add(E e) {
        add(size(), e);
        return true;
    }
    
    abstract public E get(int index);

    public E set(int index, E element) {
        throw new UnsupportedOperationException();
    }

    void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

    public E remove(int index) {
        throw new UnsupportedOperationException();
    }
    
    public void clear() {
        removeRange(0, size());
    }
    ......

}

知道抽象类的作用后,我们可以把上面的图进一步简化,得到它的简易版。
在这里插入图片描述
详解链接:

List

ArrayList:ArrayList源码分析

Set

Map

HashMap:HashMap源码分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章