`
bmqnc
  • 浏览: 126004 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ArrayList源代码分析

    博客分类:
  • java
阅读更多
有一个比较Tricky的地方是toArray方法,看下面的代码:
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;
    }


如果传进的数组的length比size大,而且不是那种刚好打一个那种,那么要小心了,如果原来的传进的数组中后面的元素不为空,实际上函数返回之后,只有在index为size的那个位置元素是空的,但size之后的元素如果原来数组不为空,那么依然不为空,Tricky!

应该要注意的是它的clone是浅拷贝的,只是对数组本身的对象引用做了拷贝,当然int,float这种原生类型除外。

还有一个比较有意思的地方是它的remove与fastRemove,我看了一下,这两个主要区别是fast版本的不需要做range check,并且不返回值,返不返回值应该不是称之为fast的原因,应该是range check的原因。

Java这种运行时进行数组下标检查比较费时,这也是他与c++,c那种语言比,效率底下的原因之一,虽然安全性比c++,c等高了,但是代价是效率。。。

线下做了一次测试,发现range check的也不会太影响效率,10的6次方那种数组大概差距不到100ms(我的机器上测试是几十ms,但因为我的机器配置较高,这里是从普通机器估算的),这就奇怪了。。。但明明java自己也说它的range check非常耗时。。。。困惑。。。
分享到:
评论

相关推荐

    arrayList源代码

    ### ArrayList源代码解析 在Java集合框架中,`ArrayList`是一个非常重要的类,它实现了`List`接口,并提供了基于动态数组的数据结构。本篇将详细分析`ArrayList`的源码,帮助读者理解其内部实现机制。 #### 类定义...

    使用对象ArrayList填充DataGrid,C#源代码ArrayList MyList = new ArrayList();

    这样,DataGrid才能正确地解析ArrayList中的对象并显示其属性。 在实际开发中,考虑到类型安全和性能,使用强类型的数据结构(如List)和数据绑定(如BindingSource)通常会更佳。但如上所述,当处理旧代码或有特殊...

    164个完整的Java程序源代码

    4. **集合框架**:Java集合框架包括ArrayList、LinkedList、HashSet、HashMap等,它们在源代码中会被广泛应用,用于数据的存储和操作。 5. **输入/输出流**:Java的I/O流系统广泛用于文件读写、网络通信等场景,源...

    JAVA源代码解析JAVA源代码解析

    Java源代码解析是深入理解Java编程语言的关键步骤,它涉及到语法、类库、设计模式以及程序执行流程等多个方面。在Java编程中,源代码是程序员用Java语言编写的文本文件,通常以.java为扩展名。当这些源代码被Java...

    Java程序设计语言源代码

    Java程序设计语言源代码是学习和理解Java技术体系的重要途径,尤其对于开发者而言,阅读和分析源代码能够深化对语言特性的理解,提高编程技能。Java作为一种广泛使用的面向对象编程语言,其源代码包含了丰富的编程...

    Java自学程序源代码

    4. **集合框架**:Java集合框架包括ArrayList, LinkedList, HashMap等,源代码可能会有对这些数据结构的使用示例,帮助理解它们的特性和应用场景。 5. **输入/输出流**:I/O流在Java中用于读写文件或网络通信,源...

    .net 官方部分源代码 

    通过分析这部分源代码,开发者可以了解.NET Framework如何实现这些常用功能,以及如何优化性能和处理异常。 2. **mscorlib**: 这是.NET Framework的基础类库,包括了.NET Framework的核心类型,如System.Object、...

    java编程思想第四版源代码.7z

    4. **集合框架**:Java的集合框架是处理数据的重要工具,源代码可能包含ArrayList、LinkedList、HashMap、HashSet等集合的使用,展示了如何存储和操作数据集。 5. **输入/输出(I/O)**:源代码可能会包含对文件的...

    Java面向对象程序设计课本例题源代码

    下面我们将详细探讨这些源代码所涵盖的知识点,并结合Java的核心特性进行解析。 1. **类与对象**:在Java中,一切皆为对象,而类是创建对象的蓝图。源代码中会展示如何定义类,包括类的属性(成员变量)和行为...

    java核心技术源代码

    源代码分析有助于理解它们的内部实现和性能特性。 3. **异常处理**:Java的异常处理机制通过try-catch-finally语句块确保程序的健壮性。源代码揭示了异常是如何被抛出、捕获和处理的。 4. **多线程**:Java提供了...

    java一些教程源代码下载

    Java编程语言是软件开发领域广泛使用的...通过下载并分析这些Java教程源代码,你可以逐步掌握Java编程技能,同时加深对各种编程概念的理解。实践中学习是提升编程能力的最好方式,因此,不要错过这个宝贵的学习资源。

    c# 程序源代码

    通过分析和运行这些源代码,学习者可以逐步掌握C#的编程技巧,提高解决问题的能力。同时,对于初学者来说,阅读他人的代码也是提升编程思维和代码风格的重要途径。因此,这个包含所有书中源代码的压缩包无疑是一个...

    java大全书上源代码2

    这份"java大全书上源代码2"的压缩包,很可能是书中下半部分讲解的实例代码,涵盖了更多高级主题和应用。 源代码是程序员理解编程思想、学习语言特性的关键。通过阅读和实践这些源代码,你可以深入学习Java的各种...

    Visual Basic 2012入门经典 源代码

    《Visual Basic 2012入门经典》是一本...通过分析和实践这些源代码,读者不仅能掌握VB2012的基本语法,还能了解实际项目开发中的最佳实践。不断实验和修改代码,将有助于提升编程技巧,为今后的高级编程奠定坚实基础。

    C#源代码大全(基于C#程序设计的源程序)

    通过分析和实践这些源代码,初学者可以深入学习如何利用C#来解决实际问题,而有经验的开发者则能从中探索新的编程技巧和最佳实践。 标签"C#源码"直接指明了内容的性质,这是一系列可以直接查看、编译和运行的C#代码...

    《Java语言程序设计》源代码

    《Java语言程序设计》源...通过阅读和分析《Java语言程序设计》源代码,开发者不仅可以巩固理论知识,还能提升实际编程技能,理解如何将理论应用到实践中。这份资源对于Java初学者或有经验的开发者都是宝贵的参考资料。

    Java核心技术第八版源代码

    本篇文章将详细解析这些源代码中涉及的关键知识点,以期帮助你更好地掌握Java编程。 1. **基础语法**:Java的基础语法包括数据类型(如整型、浮点型、字符型和布尔型)、变量、常量、运算符、流程控制(if语句、...

    250个java源代码

    "250个Java源代码"这个压缩包很显然是为了帮助初学者和希望提升Java技能的开发者提供实践素材。这些源代码实例涵盖了Java的基础概念到进阶特性,是学习和理解Java语法、编程技巧以及解决问题的有效工具。 首先,...

    java 从入门到精通 源代码

    通过分析和修改这些源代码,你可以更好地掌握Java编程的技巧和最佳实践。 在压缩包“Final”中,包含了上述所有知识点的源代码实例。建议按照书中的章节顺序逐步学习,每学完一个概念就尝试运行和理解对应的源代码...

    CoreJava 一书的所有配套源代码

    源代码会演示如何操作ArrayList、LinkedList、HashSet、HashMap等,并理解它们之间的区别。 5. **IO流**:学习如何进行文件读写、对象序列化以及使用BufferedReader和PrintWriter等进行字符流处理。 6. **多线程**...

Global site tag (gtag.js) - Google Analytics