arraylist查询快是因为遍历内存,它是怎么遍历内存的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arraylist查询快是因为遍历内存,它是怎么遍历内存的?相关的知识,希望对你有一定的参考价值。

百度了看到回答解释都是回答几种遍历的方法,但是我并没有看出这就是它查询快的原因,既然说它查询快是内存中连续的成块的,只需要遍历内存就可以了,那么它到底是怎么遍历内存使得它比linkedList查询快的?

参考技术A arraylist 是数组实现的,linkedList是链表实现的。
你可以这么理解,arraylist 的话你要像中间插入一个数据,那么后边的数据都要往后移,因为他是顺序的。
linkedList链表实现的话他是无序的,他每个元素中都存了上一个元素和下一个元素的地址,生活中的话可以理解为,比如你去医院排号,12345,这时候有一个VIP用户,要优先,插入到所有人的前面,是不需要改变其他人的号码的,只需要把他的号设置成0就行,其他人仍然是1 2 3 4 5。所以linkedList的优势在于对数据进行操作频繁的场景。相反这种情况linkedList去检索一个特定值的话,是比较麻烦的,需要一个一个的去查看匹配。所以arraylist更适合查询,linkedList适合数据频繁更新操作

ArrayList 及其源码解析

1、数组介绍

因为数组在存储数据时是按顺序存储的,存储的内存也是连续的,所以其特点是读取数据比较容易
,插入删除比较困难

2.arraylist源码分析
  1)构造方法(默认容量为10)

  2)插入数据
  扩容操作 newCapacity = oldCapacity +oldCapacity >>1

  3) 删除操作

  4)遍历操作
  arraylist在进行遍历操作时 删除元素会报错
  for(Integer num:list){
    if(num==12)
    list.remove();
  }

  只能通过迭代器来删除
  Iterator<Integer> it =list.iterator();
  while(it.hasNext()){
    Integer num=it.next();
    if(num==12){
      it.remove();
    }
  }

以上是关于arraylist查询快是因为遍历内存,它是怎么遍历内存的?的主要内容,如果未能解决你的问题,请参考以下文章

MacBook Pro 耗电变快是啥原因?应该怎么解决

面试官:从 MySQL 读取 100w 数据进行处理,应该怎么做?问倒一大遍!

分析ArrayList在遍历时修改报错的原因

arraylist和linkedlist重大区别?

JavaList遍历时删除元素的正确方式

Python为啥不能用列表遍历来删除列表中的相同的元素呢?