`
arcticfox9902
  • 浏览: 108555 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Java Collection源码学习 —— List

 
阅读更多

        Java集合类的顶层是Collection<E>接口,它声明了size()、isEmpty()、contains(Object)、iterator()、toArray()、toArray(T[])、add(E)、remove(Object)、containsAll(Collection<?>)、addAll(Collection<? extends E>)、removeAll(Collection<?>)、retainAll(Collection<?>)、clear()、equals(Object)、hashCode()这些常见的方法。其中iterator()方法返回类型为Iterator<E>,它只声明了三个方法:hasNext()、next()、remove()。

 

        抽象类AbstractCollection<E>实现了接口Collection<E>。在这个类中定义了Collection<E>接口中声明的除size()、iterator()、equals(Object)、hashCode()之外的方法,但是add(E)方法并未支持,会抛出UnsupportedOperationException。此外还重写了toString()方法,返回形如“[item1, item2, item3, item4, item5]”的字符串。

 

        接口List<E>继承自Collection<E>接口,除了父接口中声明的方法,它声明了:addAll(int, Collection<? extends E>)、get(int)、set(int, E)、add(int, E)、remove(int)、indexOf(Object)、lastIndexOf(Object)、listIterator()listIterator(int)、subList(int, int)。listIterator()方法和listIterator(int)返回类型为Iterator<E>的子接口ListIterator<E>,除了父接口声明的方法,它还声明了hasPreviours()、previous()、nextIndex()、previousIndex()、set(E)、add(E)方法。

 

        抽象类AbstractList<E>是大部分列表类的父类,继承AbstractCollection<E>类,实现了List<E>接口。主要定义了indexOf(Object)、lastIndexOf(Object)、clear()、addAll(int, Collection<? extends E>)、iterator()、listIterator()、listIterator(int)、subList(int, int)、equals(Object)、hashCode()方法。其中,indexOf(Object)方法用ListIterator的next()从前往后遍历,lastIndexOf(Object)方法用ListIterator的previous()从后往前遍历。hashCode()方法中,hashCode初始值为1,遍历列表中的元素,hashCode = 31*hashCode + (e==null ? 0 : e.hashCode()),根据这个公司计算列表的hashCode。

        subList(int, int)返回的是原始List的一个视图,并非新的List,因此如果对subList返回的列表进行add、remove、set等操作,会对原始List产生影响如果原始列表未被标记为RandomAccess,该视图的类型为SubList<E>,是AbstractList<E>的子类,SubList包含了原始列表的引用、子列表的起始位置、子列表的长度,重写了set()、get(int)、add(int, E)、remove(int)等方法,以保证对数据的修改是在正确的index位置,但是它是在原始列表上进行操作的;如果原始列表被标记为RandomAccess(实现RandomAccess接口),该视图的类型为RandomAccessSubList<E>,它是SubList<E>的子类,区别在于它的subList(int, int)方法返回值的实际类型为RandomAccessSubList<E>,而SubList<E>的subList(int, int)方法返回值的实际类型为SubList<E>。

        AbstractList<E>有两个私有的内部类:Itr和ListItr。Itr实现了Iterator<E>接口,有两个变量:cursor和lastRet,cursor类似于游标,用于指示迭代器当前的位置,初始值是0,lastRet记录上次获取的数据的位置,初始值是-1。next()方法返回当前元素,并将lastRet指向当前元素的位置,cursor加1;remove()方法删除lastRet指向的元素,并将cursor减1,lastRet设为初始值-1;hasNext()方法返回cursor != size()。ListItr是Itr的子类,实现了Iterator<E>接口,它只有一个带参数的构造函数ListItr(int),将cursor设为该参数的值;定义了hasPreviours()、previous()、nextIndex()、previousIndex()、set(E)、add(E)方法。hasPrevious()方法返回cursor != 0;previous()方法将cursor减1,返回新的cursor指向的元素,并将lastRet指向新的cursor;nextIndex()方法返回cursor;previousIndex()方法返回cursor减1;set(E)方法将lastRet指向的元素设置为参数中的元素;add(E)方法在当前位置插入参数中的元素,将lastRet设为初始值-1,cursor加1。

 

(未完待续)

分享到:
评论

相关推荐

    Java大学简明教程——实例程序设计

    3. **数据结构**:Java提供了多种内置数据结构,如数组(Array)、集合(Collection)框架(List、Set、Queue等)和映射(Map)。这些数据结构可以帮助我们有效地组织和操作数据,比如数组用于存储同类型元素的序列...

    Java集合Collection、List、Set、Map使用详解

    本文将深入解析Java集合中的Collection、List、Set和Map,包括它们的使用方法、实现原理以及如何进行排序。 ### 集合框架概述 1.1.1 容器简介 容器是Java集合框架的基础,它是一个可以存储多个对象的容器,提供了...

    java collection framework

    ### Java Collection Framework 相关知识点 #### 一、引言 在 Java 领域,《Java Collection ...通过学习这本书,开发者可以更好地理解 Java Collection Framework 的工作原理,从而写出更高效、更安全的代码。

    8.javaCollection接口.zip

    8.javaCollection接口.zip8.javaCollection接口.zip8.javaCollection接口.zip8.javaCollection接口.zip8.javaCollection接口.zip8.javaCollection接口.zip8.javaCollection接口.zip8.javaCollection接口.zip8.java...

    JAVA-SE入门学习——第八讲集合

    以上内容涵盖了Java集合框架的基础知识,包括Collection接口、Set接口、List接口、Map接口的理解和使用,以及泛型、集合与数组的转换、集合的遍历和复制等重要概念。在实际开发中,掌握这些知识对于编写高效、安全的...

    java程序员面试题——863面试集

    ### Java程序员面试题详解 #### 一、Java基础知识 1. **作用域public, private, protected, 以及不写时的区别** - **public**: 可以被任何类访问。 - **protected**: 可以被同一包内及不同包内的子类访问。 - ...

    java Collection类整理

    Java集合框架中的`Collection`接口是所有单值容器的基础接口,它定义了基本的增删查改元素的方法。`Collection`有两个主要的子接口:`List`和`Set`。`List`接口要求元素保持特定的顺序,并允许重复元素;而`Set`接口...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    Collection学习笔记——每天一个Java小技巧

    `Collection` 接口位于Java集合框架的顶端,它是`List`、`Set`等具体接口的父接口。`Collection` 提供了一个统一的访问和操作元素的平台,同时为子接口定义了基本的方法。例如,`Set`接口用于存储不重复元素,而`...

    关于Java_Collection_API_

    ### Java Collection API 关键知识点详解 #### 一、线程安全集合类 在Java的Collection框架中,集合类被划分为两大类:线程安全集合类与非线程安全集合类。早期版本的集合类(如`Vector`和`Hashtable`)通过`...

    Java.util.Collection类的学习.pdf

    Java.util.Collection类的学习 Java.util.Collection类是Java编程语言中的一个基础类库,提供了许多有用的方法来操作集合对象。Collection类包含了许多静态方法,可以对集合进行排序、混排、反转、替换等操作。 1....

    Java集合Collection、List、Set、Map使用详解编程资料

    Java集合Collection、List、Set、Map使用详解

    java8源码包含sun

    源码包含“sun”这一关键信息,意味着我们将讨论Java 8中与“sun”包相关的内容。"sun"包在Java中是一个内部使用的包,包含了Java平台的核心实现,通常不建议开发者直接使用。然而,了解这个包可以帮助我们深入理解...

    java collection

    ArrayList是Java中的动态数组,它实现了List接口。ArrayList的特点是可以通过索引快速访问元素,因为其内部是以数组的形式存储数据。但是,插入和删除元素的操作相对较慢,因为这些操作可能涉及到数组元素的移动。...

    java集合框架之Collection实例解析

    在`Collection`接口下,有两个主要的子接口——`List`和`Set`,它们分别代表有序的元素集合和无序不重复的元素集合。 1. **List接口**:`List`接口继承自`Collection`,它维护了元素的顺序,并允许包含重复元素。`...

    Java集合:Collection、List、Set、Map使用详解

    本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...

    collectionJava源码-javacollection:学习jdk1.8采集框架源代码

    本文将深入探讨"collectionJava源码",特别是针对"javacollection"项目,这是一个针对JDK 1.8集合框架的源码学习资源。我们将通过源码分析来理解其背后的实现原理,这将对提升Java开发技能大有裨益。 首先,让我们...

    JAVA COLLECTION (APress)

    《JAVA COLLECTION》是一本专注于Java集合框架的书籍,由APress出版社出版。这本书深入浅出地探讨了Java API中的各种数据结构,是学习和理解Java集合框架的理想资源。作者通过简洁明了的语言,使得初学者也能轻松...

Global site tag (gtag.js) - Google Analytics