• JDK集合框架结构分析(一)


    集合框架结构分析 一

    首先源码分析之前,得先了解一下 有关 泛型、泛型擦除、内部类、嵌套类 等知识

    首先看一下ArrayList类的继承、实现结构
    (JDK1.7)
    集合类最高的层次的接口
    Collection 接口

    Collection接口 继承自 Iterable接口,Iterable提供所有集合类的的遍历方案。它只定义了一个返回Iterator 接口类型的方法定义。 可用于 增强ForEach 语法糖的都是Iterable类型的.

    Iterator 接口介绍:

    Iterator 接口只提供三个方法。

    Collection 接口提供一个默认实现: AbstractCollection 抽象类

    这个类提供了Collection类中定义的方法的一些实现 ,同时 重写了toString() 方法,为集合类提供了便于观感的toString字符串。
    有趣的是在AbstractCollection类中定义了一个MAX_ARRAY_SIZE 静态常量:

    这个常量定义的是Integer类型的最大值减去8 原因在注释中已经说的很明白了,因为一些 jvm 分配一些对象头在数组

    方法示例介绍:AbstractCollection 中的toArray方法示例:


    这个方法的实现中 包含了反射,native方法等知识

    接下来介绍 List接口

    List接口继承于Collection接口 同时添加了一些新的方法: get()、set()等

    List 接口也有一个 AbstractList 抽象类 其中也实现了 List 接口定义的一些方法

    AbstractList 同时继承AbstractCollect和实现List 接口。

    这里需要注意一点 AbstractList 从 AbstractCollection 继承的方法 和 AbstractList 从 List 实现的方法 重合了,这是可以的!!!

    AbsrtactList 提供了部分的的方法的实现 其中最主要的是 提供了iterator和listIterator,subList方法的实现,同时提供了一个modCount变量(这个变量非常重要)

    • iterator 是以一种 内部类形式实现 Itr实现Iterator接口
    • listIterator 是一种内部类实现 继承 Itr 实现 ListIterator

    ListIterator 继承Iterator 接口

    它相当于是一个 双向的迭代器 还额外提供了一个set方法

    方法示例介绍:
    AbstractList 中的subList方法的实现:

    这里涉及另外的两个类 RandomAccessSubList 和 SubList

    终于到了ArrayList类的介绍了:

    ArrayList类的定义:

    它继承于AbstractList 同时实现List接口 (其余的RandomAccess、Cloneable、Serializable都是标记接口 其中没有定义任何的方法)

    (本文只介绍集合类的结构层次,不介绍类的实现详情)

    AbstractList抽象类有一个AbstractSequentialList 抽象子类(sequential表示相连的、连续的) 为什么要介绍这个类呢?LinkedList类继承自与这个类

    接下来介绍Queue接口,Queue的接口层次:

    Deque 接口表示双端列 它继承自 Queue ,他有个实现是 LinkedList,可以看出LinkedList也是Queue的实现之一,他可以当做一个队列使用

    LinkedList类介绍:

    LinkedList类的定义:

  • 相关阅读:
    分享点干货(此this非彼this)this的详细解读
    程序员需要掌握的排序算法之希尔排序(最小增量排序)
    JAVA基础学习笔记
    简单的时间日期格式化(未封装成控件)
    面试造航母,工作拧螺丝
    浅谈jquery插件开发模式
    Relative与Absolute组合使用
    表单
    个人介绍
    用计数法解决数组排序问题
  • 原文地址:https://www.cnblogs.com/joeCqupt/p/7076650.html
Copyright © 2020-2023  润新知