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

java源码分析之--ArrayList

阅读更多
    有感于现在开发到了一个瓶颈,表现为对于一般的业务,能进行开发,但是只要业务稍微变化点,代码就需要进行大的改动,代码也写的比较烂,自己都不想去看自己写的代码了。于是现在准备分析下java的源码,试图提高自己的编程能力。
    现在开始付诸行动。
    首先是将src包解压,然后导入到IDE中。目前只分析了下ArrayList,到现在还没有看完,不过确实感觉代码写的不错,以前从没考虑的gc,里面居然全部提到了,例如:
private void fastRemove(int index) {
        modCount++;
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // Let gc do its work
    }
这是从源码里面拷贝的一段代码,意思是移除指定位置上面的元素,特别是
      elementData[--size] = null; // Let gc do its work 
这行代码写的很精妙,实现了两个功能,一个是移除指定位置上面的元素,这个大家一眼就能看到的,貌似将该对象指向null,之后gc就会自动来回收该内存,这个代码还有一个功能,--size将该集合的长度减少1,刚看完的时候,我还以为这里有个bug呢,还兴奋了还一会儿呢,我还以为这个长度没有相应的减少,写了一个Test之后,又没法有问题,再次分析才发现这个了。不得不佩服那些开发人员。
     modCount,如果分析ArrayList,一定会到处看到这个,仔细查找一番,你又会发现modCount又未在ArrayList里面定义,这个变量定义在AbstractList类中,ArrayList继承了AbstractList,modCount的作用,我没细细深究,我大概看了下,有点像hibernate乐观锁里面version,因为ArrayList是非线程安全的,为了防止别人修改了ArrayList对象而自己却不知道,特意加了个modCount,只要ArrayList修改,modCount就会执行modCount++。
    分析源码还有一个感触,这个集合方法也是对数组的封装,主要实现的功能无外乎CRUD,虽然看起来有十几个二十多个方法,但都是对里面的几个私有的CRUD方法进行扩充的。虽然这些方法能满足我们大部分人的需要,如果有某些特殊的需要,可以很便捷的写些方法进行再次扩充。
0
1
分享到:
评论

相关推荐

    java源码和android-17源码

    Java源码和Android 17源码是两个重要的学习资源,对于深入理解Java编程语言以及Android应用程序开发至关重要。这两部分源代码提供了丰富的信息,帮助开发者探究底层实现细节,提升编程技能,解决实际问题。 首先,...

    计算机后端-Java-Java核心基础-第24章 集合01 14. ArrayList的源码分析.avi

    计算机后端-Java-Java核心基础-第24章 集合01 14. ArrayList的源码分析.avi

    java提高篇(二一)-----ArrayList.pdf

    【ArrayList源码分析】 1. **底层数据结构** - ArrayList的核心数据成员是一个Object类型的数组`elementData`,用于存储列表中的元素。使用transient关键字标记,意味着在序列化过程中,`elementData`的值不会被...

    ArrayList源码分析(含jdk1.8).pdf

    在了解ArrayList的源码分析时,我们主要探讨其在Java Development Kit (JDK) 1.8中的实现。ArrayList是一个非常重要的集合框架,用于动态数组的实现,其功能类似于数组,但可以在运行时动态调整大小。它是一个非线程...

    Java源码分析:集合-容器.pdf

    Java集合框架是Java编程语言中非常重要的组成部分,它为Java开发者提供了大量用于存储数据的结构。Java集合框架主要包括两大类,单列集合和双列集合。单列集合中,Set接口的集合主要用于存储不重复的元素,而List...

    ArrayList源码分析

    ### ArrayList源码分析 #### 一、概述 `ArrayList` 是 Java 集合框架中的一个重要的类,它实现了 `List` 接口,并且内部使用动态数组来存储元素。由于其灵活的特性(比如可以方便地增加或删除元素),`ArrayList` ...

    java源码 收集的java代码源代码

    Java源码集合是一个珍贵的学习资源,它包含了从大一开始积累的31个不同Java项目,适合于课程设计、毕业设计以及个人技能提升。这个压缩包是开发者或学习者的一个宝库,提供了各种类型的代码示例,有助于深入理解Java...

    JAVA实战项目源码-计算机毕业设计java专业-项目源码-项目说明介绍-java+applet-家庭理财系统

    《JAVA实战项目源码-家庭理财系统》是一个典型的JAVA编程语言实现的计算机毕业设计项目,旨在帮助学生理解和应用JAVA技术解决实际问题。该项目利用JAVA的强大力量,结合APPLET技术,构建了一个全面的家庭财务管理...

    JAVA实战项目源码-计算机毕业设计java专业-项目源码-项目说明介绍-JAVA+SQL离散数学题库管理系统

    **JAVA实战项目源码-计算机毕业设计java专业-项目源码-项目说明介绍-JAVA+SQL离散数学题库管理系统** 这个项目是一个基于JAVA编程语言和SQL数据库技术的离散数学题库管理系统,专为计算机专业学生设计,适用于毕业...

    ArrayList-LinkedList-源码.rar

    本篇将深入探讨ArrayList和LinkedList的内部实现机制,通过源码分析来揭示它们在性能、使用场景以及内存管理上的差异。 ArrayList是基于动态数组实现的,它的底层数据结构是一个Object[]数组。当我们向ArrayList中...

    java毕业设计项目源码---蓝宇快递打印系统

    【Java毕业设计项目源码——蓝宇快递打印系统】是一个基于Java编程语言的软件开发实践,主要用于实现快递公司的打印管理功能。这个系统包含了完整的源代码,对于学习Java编程,特别是针对毕业设计的学生来说,是一个...

    java数据分析源码-Data-Structures-3rd:Java中的数据结构和算法分析的源代码(第三版)

    《Java数据分析源码-Data-Structures-3rd》是一个基于Java编程语言的数据结构与算法分析的开源项目,主要针对第三版的内容进行实现。这个项目为开发者提供了深入理解数据结构和算法的实践平台,帮助他们提升在实际...

    Java 开发-----图书管管理系统(视频+源码).rar

    分析并理解这些代码,可以让你了解到如何将Java语言的特性应用于实际项目,如何组织代码结构,以及如何处理各种业务逻辑。你可以逐行阅读代码,理解每个类和方法的作用,查看它们是如何协作完成图书管理系统的功能的...

    Java源码分析Iterable.pdf

    Java源码分析Iterable Java源码分析Iterable是Java编程语言中一个基础组件的源码分析,Iterable是一个接口,它允许对象被迭代,例如foreach循环中的数组或集合。了解Iterable的源码,可以帮助开发者更好地理解Java...

    javalist数据结构-Java数据结构-------List.pdf

    以下是ArrayList添加元素到尾部的源码分析: ```java public boolean add(E e) { ensureCapacityInternal(size + 1); elementData[size++] = e; return true; } private void ensureCapacityInternal(int ...

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

    java8 源码 List相关实现类的源码解析(JDK1.8) 2018.9.22- List的架构图 ArrayList 继承关系: ArrayList -> AbstractList 实现 List接口 ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的...

Global site tag (gtag.js) - Google Analytics