有感于现在开发到了一个瓶颈,表现为对于一般的业务,能进行开发,但是只要业务稍微变化点,代码就需要进行大的改动,代码也写的比较烂,自己都不想去看自己写的代码了。于是现在准备分析下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方法进行扩充的。虽然这些方法能满足我们大部分人的需要,如果有某些特殊的需要,可以很便捷的写些方法进行再次扩充。
分享到:
相关推荐
Java源码和Android 17源码是两个重要的学习资源,对于深入理解Java编程语言以及Android应用程序开发至关重要。这两部分源代码提供了丰富的信息,帮助开发者探究底层实现细节,提升编程技能,解决实际问题。 首先,...
计算机后端-Java-Java核心基础-第24章 集合01 14. ArrayList的源码分析.avi
【ArrayList源码分析】 1. **底层数据结构** - ArrayList的核心数据成员是一个Object类型的数组`elementData`,用于存储列表中的元素。使用transient关键字标记,意味着在序列化过程中,`elementData`的值不会被...
在了解ArrayList的源码分析时,我们主要探讨其在Java Development Kit (JDK) 1.8中的实现。ArrayList是一个非常重要的集合框架,用于动态数组的实现,其功能类似于数组,但可以在运行时动态调整大小。它是一个非线程...
Java集合框架是Java编程语言中非常重要的组成部分,它为Java开发者提供了大量用于存储数据的结构。Java集合框架主要包括两大类,单列集合和双列集合。单列集合中,Set接口的集合主要用于存储不重复的元素,而List...
### ArrayList源码分析 #### 一、概述 `ArrayList` 是 Java 集合框架中的一个重要的类,它实现了 `List` 接口,并且内部使用动态数组来存储元素。由于其灵活的特性(比如可以方便地增加或删除元素),`ArrayList` ...
Java源码集合是一个珍贵的学习资源,它包含了从大一开始积累的31个不同Java项目,适合于课程设计、毕业设计以及个人技能提升。这个压缩包是开发者或学习者的一个宝库,提供了各种类型的代码示例,有助于深入理解Java...
《JAVA实战项目源码-家庭理财系统》是一个典型的JAVA编程语言实现的计算机毕业设计项目,旨在帮助学生理解和应用JAVA技术解决实际问题。该项目利用JAVA的强大力量,结合APPLET技术,构建了一个全面的家庭财务管理...
**JAVA实战项目源码-计算机毕业设计java专业-项目源码-项目说明介绍-JAVA+SQL离散数学题库管理系统** 这个项目是一个基于JAVA编程语言和SQL数据库技术的离散数学题库管理系统,专为计算机专业学生设计,适用于毕业...
本篇将深入探讨ArrayList和LinkedList的内部实现机制,通过源码分析来揭示它们在性能、使用场景以及内存管理上的差异。 ArrayList是基于动态数组实现的,它的底层数据结构是一个Object[]数组。当我们向ArrayList中...
【Java毕业设计项目源码——蓝宇快递打印系统】是一个基于Java编程语言的软件开发实践,主要用于实现快递公司的打印管理功能。这个系统包含了完整的源代码,对于学习Java编程,特别是针对毕业设计的学生来说,是一个...
《Java数据分析源码-Data-Structures-3rd》是一个基于Java编程语言的数据结构与算法分析的开源项目,主要针对第三版的内容进行实现。这个项目为开发者提供了深入理解数据结构和算法的实践平台,帮助他们提升在实际...
分析并理解这些代码,可以让你了解到如何将Java语言的特性应用于实际项目,如何组织代码结构,以及如何处理各种业务逻辑。你可以逐行阅读代码,理解每个类和方法的作用,查看它们是如何协作完成图书管理系统的功能的...
Java源码分析Iterable Java源码分析Iterable是Java编程语言中一个基础组件的源码分析,Iterable是一个接口,它允许对象被迭代,例如foreach循环中的数组或集合。了解Iterable的源码,可以帮助开发者更好地理解Java...
以下是ArrayList添加元素到尾部的源码分析: ```java public boolean add(E e) { ensureCapacityInternal(size + 1); elementData[size++] = e; return true; } private void ensureCapacityInternal(int ...
java8 源码 List相关实现类的源码解析(JDK1.8) 2018.9.22- List的架构图 ArrayList 继承关系: ArrayList -> AbstractList 实现 List接口 ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的...