ArrayList源码的阅读与理解
来源:互联网 发布:麒麟ubuntu安装 编辑:程序博客网 时间:2024/05/20 18:16
JDK1.8ArrayList源码分析
ArrayList几个对象:
1、默认容量,默认为10。tips:在new ArrayList()的时候并不会创建一个长度为10的数组,这个数值在add的时候如果发现没有指定容量会初始化一个10长度的Object[]给它
2、空对象数组。主要用于length=0时赋值
3、空对象数组。主要用于比较是否为空数组和new ArrayList()赋值
4、实际存放数据数组对象。transient关键字在本博客中已有阐释点击打开链接。不为Private的原因是为了让内部类更容易访问。
那么,问题来了,为什么这个Object[]对象要用此关键字修饰呢?
原因是在序列化过程中,如果用Serializable方式去序列化,elementData通常有预留的缓存容量,会导致不必要的空间和时间的浪费。所以ArrayList重写了Serializable的序列化方法,通过size+实际容量的方式去序列化。tips:如何定制化序列化方式点击打开链接
5、实际容量。
ArrayList几个方法:
add方法:
1、检查容量
2、扩容的最小值为10
3、记录修改次数,验证扩容长度必须大于数组容量
4、扩容的量级为原来数组容量的1.5倍!采用的是new更大的数组去copy-parse填充!
clear()方法:
将值设置为null,让垃圾回收器回收无引用对象。
System.arraycopy()和Arrays.copyOf()在ArrayList中被大量使用,同样的COPY有什么区别呢?
System.arraycopy方法:
此方法的作用是将dest从destPos到destPos+length的位置赋值给src从srcPos的位置开始,此方法是native方法点击打开链接
Arrays.copyOf方法:
生成新的数组去接收,再用System.arraycopy去赋值,为了一个数组复制另一个数组的时候,对象引用一致导致数据操作出问题!
小结:这个差别,也是深浅拷贝的区别!
- ArrayList源码的阅读与理解
- HashMap源码阅读与理解
- ConcurrentHashMap源码阅读与理解
- ArrayList源码阅读笔记
- ArrayList源码阅读
- ArrayList源码阅读
- java8 ArrayList源码阅读
- 源码阅读之ArrayList
- ArrayList源码阅读
- ArrayList源码阅读笔记
- ArrayList源码阅读
- Java源码阅读-ArrayList
- JDK源码阅读-ArrayList
- java8 ArrayList源码阅读
- Java源码阅读-ArrayList
- java8 ArrayList源码阅读
- ArrayList源码阅读笔记
- CopyOnWriteArrayList与ArrayList的理解
- caffe绘制训练过程的loss和accuracy曲线
- 读书笔记【c语言描述】--
- golang处理表单的输入+非空判断+防止表单重复提交
- 柱状图向下钻取
- 20个非常有用的Java程序片段
- ArrayList源码的阅读与理解
- 17 (总结)Linux下su与su -命令的本质区别
- leetcode 654. Maximum Binary Tree 构造最大二叉树
- jeesite导出Excel Minimum column number is 0
- 10026---Kafka详解二、如何配置Kafka集群
- 嵌入式Linux根文件系统和挂载
- 字面量常量运算符,switch case 字符串的简单举例,constexpr使用详解
- 课程设计——航空客运订票系统
- iOS开发之国际化