java集合源码分析(一)---整体

吐槽

这个月要把java的集合好好重新看下了,把上个月没看的补上,突然发现自己写了这么久的安卓,集合那块都忘的差不多了,自己看了下自己当时写的集合的博客,写的真心烂唉。
自己当时学的时候的博客

主要的目的是搞清楚集合底部的实现原理,和几个的具体的区别
学习的方式:看大佬的博客 + 自己看源码代码 + 画流程图
大佬博客链接:大佬博客专栏

集合的整体框架结构

java集合源码分析(一)---整体
在这张图里面,我们发现里面就三大类东西

  • 集合接口:6个接口(短虚线表示),表示不同的集合类型
  • 抽象类:5个抽象类(长虚线表示),对接口的部分实现
  • 实现类:8个实现类(实线表示),对接口的具体试现

在图中我们也发现,集合也分为两个派系,一个Collection和Map

Collection接口

Collection接口是集合类的根接口,它没有具体的实现,但是让其两个儿子Set和List,其中Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
我们去官方文档看下:

java集合源码分析(一)---整体
java集合源码分析(一)---整体
好像就是这个就是个接口,里面有一大堆的方法,而且我们发现里面这个接口,进去看下这个接口的源码,发现里面的方法都是添加元素,删除元素,返回集合中的个数,以及清空集合,但是里面也有一个特殊的方法

    Iterator<E> iterator();

返回在这个集合上面的迭代器

public interface Collection<E> extends Iterable<E> {
..........
    int size();

    boolean isEmpty();

   boolean contains(Object o);

  
    Iterator<E> iterator();

 
    Object[] toArray();

................
    

default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

然后我们发现这个类居然也继承另一个类Iterable,我们也进去看下这个类

public interface Iterable<T> {
    /**
     * Returns an iterator over elements of type {@code T}.
     *
     * @return an Iterator.
     */
    Iterator<T> iterator();

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}

这个类也是个接口,主要的方法也是那个方法 Iterator iterator();返回这个集合上面的迭代器

所以,逻辑很清晰,父接口 Iterable里面,就一个iterator 方法,返回一个terator 迭代器,然后子接口Collection,还是有这个返回迭代器的方法,然后加了许多其他的方法

我们接着去看下Iterator具体实现

Iterator接口

我们还是先去看下官方的文档
java集合源码分析(一)---整体
java集合源码分析(一)---整体
好像看了下,就是简单的一个接口,它有三个方法,具体的实现还需要看它的具体实现类

Collection派系

java集合源码分析(一)---整体
其中,ArrayList,HashSet,LinkedList,TreeSet是我们经常会有用到的已实现的集合类。

Map派系

还是先看下官方的文档
java集合源码分析(一)---整体
java集合源码分析(一)---整体
java集合源码分析(一)---整体
Map实现类用于保存具有映射关系的数据。Map保存的每项数据都是key-value对,也就是由key和value两个值组成。Map里的key是不可重复的,key用户标识集合里的每项数据。

HashMap,TreeMap是我们经常会用到的集合类

总结

今天就是简单的看下集合的总体框架什么的,具体的慢慢再看