有感于现在开发到了一个瓶颈,表现为对于一般的业务,能进行开发,但是只要业务稍微变化点,代码就需要进行大的改动,代码也写的比较烂,自己都不想去看自己写的代码了。于是现在准备分析下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-Java核心基础-第24章 集合01 14. ArrayList的源码分析.avi
java8 源码 List相关实现类的源码解析(JDK1.8) 2018.9.22- List的架构图 ArrayList 继承关系: ArrayList -> AbstractList 实现 List接口 ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的...
ArrayList源码分析 打开ArrayList的源码我们能看到ArrayList实现了List接口,扩展至AbstractList,其本质是一个可变长度的数组。 Java8中ArrayList包含注释一起一共1468行代码,算是一个比较复杂的类,所以这当中...
缓慢更新一些个人学习java相关源码过程中的笔记,在这里你将不可避免地看到以下情况: 个别不懂/没想好的地方留空待补全 限于个人水平出现的解读错误 编辑错误 排版不统一 如发现有错,欢迎指正! 如果对你有用,...
主要为大家详细介绍了Java集合框架ArrayList源码分析,感兴趣的小伙伴们可以参考一下
本资源根据个人学习和总结,主要介绍Java中ArrayList扩容机制源码的解析,主要包含文字和代码等内容,以源码的形式进行分析,详细介绍了ArrayList扩容机制的整个流程,特此将该资源分享
java注解源码分析 javapro 1、ArrayList 分析 源码注释 2)常用方法示例 3)常见bug分析 2、NIO 内容 1)基础知识点 2)实例
主要介绍了Java编程中ArrayList源码分析,具有一定借鉴价值,需要的朋友可以参考下。
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速...
能学到什么:ArrayList的源码分析,自动扩容和自动缩容的源码分析,相关参数的深度解析,从是什么,为什么,怎么做三个角度进行讲解,用通俗易懂的白话进行介绍,LinkedList和Vector以及ArrayList的区别以及使用场景...
hashmap源码 to-be-architect to be a Java architect,you should learn these.This page is updated irregularly. Java基础 深入分析 Java SPI 机制和原理 并发编程专题 Executors线程池 线程池ThreadPoolExecutor...
主要为大家详细介绍了Java集合系列之ArrayList源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
从源码角度分析Java中常用集合类的扩容机制 从这一篇开始,会陆续通过笔记来整理和记录之前看过的各种Java集合相关的知识点,主要包括List和Map。今天这一篇主要整理一下集合扩容相关的知识,涉及到的集合框架有:...
集合源码分析 java基础复习 [TOC] 一、集合 1.Iterator 2.Collection 2.1 List--->有序、有索引、元素可重复 1.ArrayList: 底层是数组结构、查询快、增删慢、不同步 添加第一个元素的时候,创建默认个数是10个,...
集合源码分析 JAVA: 基本语法 static 修饰变量 方法 静态块(初始化块 构造函数 ) 静态内部类() 静态导包 final() transient() foreach循环原理() volatile底层实现() equals和hashcode(, ) string,stringbuffer和...
来自视频课笔记 面试肯定没问题 包含线程安全的list和不安全的list
│ │ 13.RPC底层通讯原理之Netty线程模型源码分析.wmv │ │ │ ├─14.分库分表之后分布式下如何保证ID全局唯一性 │ │ 14.分库分表之后分布式下如何保证ID全局唯一性.mp4 │ │ │ └─15.大型公司面试必答之...
源码分析(ArrayList) Linked List 的标准实现代码 Linked List 示例代码 Java 源码分析(LinkedList) LRU Cache - Linked list: LRU 缓存机制 Redis - Skip List:跳跃表、为啥 Redis 使用跳表(Skip List)而...
源码分析:ArrayList、Vector、LinkedList、HashMap、ConcurrentHashMap、HashSet、LinkedHashSet and LinkedHashMap 线程状态、线程机制、线程通信、J.U.C 组件、JMM、线程安全、锁优化 磁盘操作、字节操作、字符...