Java中ArrayList数组扩容内存问题

集合中ArrayList,一直认为,扩容的话,就是从新建了一个对象,然后把新对象的引用重新赋给当前对象,最近想想不对。

1、ArrayList:对象中有两个变量

transientObject[] elementData; 用来存储数据 和private int size;用来记录当前数组长度

2、当我们new ArrayList()的时候,这时我们在内存中开辟了一块ArrayList()的内存空间,注意,这里不是Array的内存空间,本身ArrayList是没有任何意义的,有意义的是他的elementData这个变量

3、当触发扩容的时候,最后是通过System.arraycopy的方式去拷贝数组的,就是说声明一个更大的数组,然后把老数组的元素拷贝到这个新数组中然后实现扩容

4、扩容时这里的elementData的内存地址必然会发生改变(其实我也不太确定)

5、所以,ArrayList()这个内存地址是不会改变的,但是他的内部的elementData是改变的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,292评论 0 16
  • 一、对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器 往ArrayList中添加对象:...
    rochuan阅读 899评论 0 0
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,526评论 0 3
  • 一.线性表 定义:零个或者多个元素的有限序列。也就是说它得满足以下几个条件:  ①该序列的数据元素是有限的。  ②...
    Geeks_Liu阅读 2,716评论 1 12
  • 从前波斯国王有一个儿子,爱上了一个牧羊女。他对他的父亲说:“父王,我爱上了一个牧羊人的女儿,我要娶她为妻。”国王说...
    你是我de符合阅读 528评论 0 2