`
I_conquer
  • 浏览: 25943 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ArrayList中toArray()方法源码分析

    博客分类:
  • Java
阅读更多
public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

 如果传入数组的长度小于size,返回一个新的数组,大小为size,类型与传入数组相同。所传入数组长度与size相等,则将elementData复制到传入数组中并返回传入的数组。若传入数组长度大于size,除了复制elementData外,还将把返回数组的第size个元素置为空。

其中:elementData存储ArrayList内的元素,size表示它包含的元素的数量,都是ArrayList的属性。

elementData这个属性需要特别说明一下,Java 8 中是这样定义的

transient Object[] elementData;
private int size;

 JDK1.6版本中elementData是私有的,不知道为什么现在不是了,有知道的朋友可以解答下。

这里我主要解释的是transient关键字。Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。

transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。 

分享到:
评论

相关推荐

    list.toArray方法

    标签“源码”暗示了可能涉及对Java标准库中List接口和ArrayList类的源代码分析,帮助读者理解`toArray()`在内存分配、性能优化等方面的设计。而“工具”可能指的是使用一些辅助工具(如IDE的调试功能)来跟踪和理解...

    ArrayList源码分析.docx 等

    转换为其内部数组 `elementData`,然后根据转换后的数组长度设置 `size`。这里需要注意的是,如果 `c.toArray()` ...在面试中,深入理解 ArrayList 的源码和其与其他数据结构的区别是展示 Java 基础技能的重要方面。

    Java集合框架ArrayList源码分析(一)

    《深入剖析Java集合框架ArrayList源码》 Java集合框架中的ArrayList是开发者常用的数据结构,它是一种基于动态数组实现的列表。ArrayList的特点在于它的内部结构、性能优化以及在并发环境下的处理方式。本文将深入...

    2022年Java源码分析:深入探讨Iterator模式Java教程.docx

    在JDK 1.4.2版本中,由于泛型的引入是在JDK 1.5,所以源码分析可能更专注于基础的类型操作。`toArray()`方法提供了一种将集合转换为数组的途径。`toArray()`有两重形式:一个不接受参数,返回一个Object数组;另一个...

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    v.toArray(new Integer[v.size()]) Fail-Fast机制 fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。 通过modCount的值来判断是否多...

    JAVA集合介绍

    通过对 `ArrayList` 的概述及源码分析,我们可以更深刻地理解其工作原理和内部实现机制。`ArrayList` 作为一种高效的动态数组实现,非常适合处理大量数据和频繁的元素增删操作。不过需要注意的是,由于其非线程安全...

    Gallery2源码流程说明

    通过上述分析,我们可以了解到Gallery2是如何利用 `BucketHelper` 类来从数据库中加载多媒体文件的信息的。此外,还涉及到了一个 `AlbumsLoader` 类用于多媒体集的异步加载。这些基础组件共同构成了Gallery2的核心...

    LinkedList代码.rar

    通过分析源码,你可以更好地了解其在不同场景下的性能表现,以及如何优化LinkedList的使用以提高程序效率。 总之,LinkedList是一种重要的数据结构,理解其工作原理和特性对于提升Java编程能力至关重要。通过学习和...

    JAVA Vector源码解析和示例代码

    【JAVA Vector 源码解析和示例代码】 在Java编程语言中,`Vector`类是集合框架的一部分,早在JDK 1.0版本就已经存在。`Vector`类继承自`AbstractList`并实现了`List`, `RandomAccess`, `Cloneable`等接口,提供了...

    所有Dialog对话框毕业设计—(包含完整源码可运行).zip

    在Android开发中,Dialog对话框是一种非常常见的用户交互元素,用于提供临时信息或者与用户进行简单交互。...在分析和运行提供的源码时,读者将有机会亲身体验到Dialog的实现过程,并能够灵活地应用到自己的项目中。

    Java工具:高性能并发工具Disruptor简单使用

    它通过消除锁和线程间通信的开销,实现了微秒级的延迟和极高的吞吐量,尤其适用于金融交易、实时分析等对性能有苛刻要求的领域。 Disruptor的工作原理基于环形缓冲区(Ring Buffer)的设计,摒弃了传统队列的数据...

    JavaCollectionsTutorial:Java Collections Framework教程的源代码-Source code collection

    - 扩展与定制:源码分析可以帮助你自定义自己的集合类,满足特定需求。 在"JavaCollectionsTutorial-master"这个压缩包中,你将看到各种集合操作的实例,这些例子涵盖了基本用法到高级特性的使用,是学习和掌握...

Global site tag (gtag.js) - Google Analytics