当前位置:网站首页>【HBZ分享】ArrayList的增删慢查询快的原因

【HBZ分享】ArrayList的增删慢查询快的原因

2022-07-06 04:16:00 hbz-

ArrayList什么情况下的查询才很快?

  1. 只有通过下标index查询时,性能才很快,因为可以直接找到对应下表数据,时间复杂度O(1)
  2. 当非下标查询,而是通过for循环来遍历时,性能并不快,时间复杂度时O(n)
  3. 误区:很多人误以为ArrayList任何情况查询都很快,其实是错的,只有通过index的查询才很快

ArrayList的增加为什么性能慢

  1. 在像ArrayList中加入元素add的时候,有可能会导致List的扩容, 因为ArrayList底层是数组结构,但数据不支持动态扩容,所以ArrayList的扩容机制就是再创建一个新数组,把就数组数据迁移到新数组,然后再加入新元素
  2. 扩容机制是,如果原数组不存在,则直接扩容10个。如果原数组存在,则扩大1.5被,即oldSize + oldSize >> 1

ArrayList的删除为什么性能慢

  1. 删除指定元素,ArrayList底层实际是从删除的index位置为起点起点,到最后一个的所有元素,向前移动一位,然后把最后一位设置成null
  2. 移动所有元素,实际就是通过底层System.arraycopy(),将数组的index+1位置开始,复制到index位置,然后最后一位=null
  3. 所以这个过程会很慢

ArrayList的修改

  1. 修改和查询一样,当指定index时,直接修改,性能很高O(1)
  2. 当循环for去修改,那就性能低O(n)
原网站

版权声明
本文为[hbz-]所创,转载请带上原文链接,感谢
https://blog.csdn.net/a645293829/article/details/125589457