全教育培训行业第三方平台平台就业机构
扫码试听
扫码试听
Q:2638333071
首页 > 技术干货 > 软件开发 > > arraylist为什么可变长度知乎(arraylist为什么不能放基本类型)
行业动态 行业问答 课程问答 零基础学习 就业前景 技术干货

arraylist为什么可变长度知乎(arraylist为什么不能放基本类型)

发布时间:4 周 前 栏目:软件开发 浏览:

1、arraylist为什么可变长度知乎

ArrayList底层是数组,数组你知道的是固定的长度,那ArrayList咋变?

ArrayList在存东西之前会判断一次:

看看下标索引,有没有到达初始化长度最大索引的临近位置,如果到了,它就新建一个临时数组长度为当前数组长度的1.5倍,然后在把当前数组内容拷贝到临时数组里面去

最后在把当前数组指向临时数组引用,这样就完成当前数组的扩容了!

你看看源码吧,那更详细!

arraylist为什么可变长度知乎

2、JAVA里,ArrayList在内存分配上究竟是怎样的?

我猜的:

ArrayList:

初始化的时候不指定元素个数:在不同的时刻对其增删插,元素在内存中不可能连续(中间的内存会被其他对象占掉);

初始化的时候指定元素个数:可以暂时连续存储,但后期如果在不同的时刻对其增删插,元素也不可能连续。

因此,在索引ArrayList时,速度往往会比数组慢(但我猜这背后肯定会有一些优化机制,当然这种慢在需要ArrayList的时候是可以原谅的)。

另外,ArrayList的内存模型是什么?有人说是队列,但队列是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表,貌似不对吧?

arraylist为什么可变长度知乎

3、ArrayList 和LinkList的区别

一.ArrayList 底层维护的是一个Object数组,默认的元素个数为10,ArrayList的特点是增删慢查询快

1.增加慢的原因:是因为在添加数据的时候,有可能会导致ArrayList底层维护的数组的元素个数不够用,这时候就会调用数组的grow方法进行扩容,而扩容的方法是创建一个新的数组,然后把老数组中的信息复制到新的数组当中,这个拷贝的过程很浪费时间和内存

2.删除慢的原因:因为删除某一个元素,会导致该元素后面的元素进行整体前移,也是一个拷贝的过程,这个拷贝过程非常的浪费时间

3.查询快的原因:ArrayList底层维护的是一个数组,可以通过数组的下标直接查询到数组中的内容,这种方式非常的快。

二.LinkList底层维护的是一个链表,所以LinkList的特点是增删快,查询慢

1.增删快的原因:因为LinkList底层维护的是一个链表,在增删的时候可以直接添加到要添加的位置或者直接删除要删除的部分,对其他部分没有影响,速度非常的快。

2.查询慢的原因:因为LinkList底层维护的是一个链表,查询的时候必须一个一个的进行查询,知道找到匹配的数据为止,这个过程非常的浪费时间。

上一篇:没有了
技术干货
零基础学习
行业多年深耕,从这报名,学费立减800
  • 岳同学180****1241刚刚成功领取
  • 胡同学134****6431刚刚成功领取
  • 李同学150****6122刚刚成功领取
  • 张同学136****2231刚刚成功领取
  • 孙同学178****5521刚刚成功领取
  • 齐同学156****7788刚刚成功领取
猜你喜欢
查看更多
相关推荐
查看更多
现在学习,我的薪资能达到多少?
立即报名

联系我们:

Q:2638333071

鄂ICP备2023015464号