zoukankan      html  css  js  c++  java
  • 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类的定义:

  • 相关阅读:
    box-shadow 用法总结
    CSS绘制三角形
    js实现限制容器中字符个数
    解决 IE 或者兼容模式不支持 document.getElementsByClassName() 的方法
    JavaScript获取浏览器高度和宽度值(documentElement,clientHeight,offsetHeight,scrollHeight,scrollTop,offsetParent,offsetY,innerHeight)
    appium-python-api中文文档
    通过adb获取应用的Activity堆栈信息
    小米手机连接adb只显示List of devices attached
    关于如何等待一个元素的出现而不用一些笨拙粗暴的time.sleep()方法
    Appium环境搭建
  • 原文地址:https://www.cnblogs.com/joeCqupt/p/7076650.html
Copyright © 2011-2022 走看看