美文网首页
Java中ArrayList数组扩容内存问题

Java中ArrayList数组扩容内存问题

作者: 看风筝的小男孩 | 来源:发表于2017-07-30 20:00 被阅读0次

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

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

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

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

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

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

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

相关文章

网友评论

      本文标题:Java中ArrayList数组扩容内存问题

      本文链接:https://www.haomeiwen.com/subject/knyklxtx.html