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查询快是因为遍历内存,它是怎么遍历内存的?的主要内容,如果未能解决你的问题,请参考以下文章