ArrayList与LinkedList的谬论
对数据进行修改的时候使用链表可以直接在指定的位置实现删除、插入操作,不需要像数组那样还要移动数组中的数据,而实现数据直接访问的时候使用数组的就可以直接的找到目的地址,不像链表一样需要从头到尾的寻找。
所以很多人认为在数据的插入、删除的时候链表的效率要比数组的高,因为他不需要数组的频繁的移动数据,但是这几天看到一篇文章说是其实数组的效率还是比较高的,因为他在数据移动的时候是在内存中并且相邻,数据移动就会非常的快。而链表需要从前到后找到数据然后在进行插入、删除操作。而链表在数据的遍历的时候是很费时间的。
有一个很形象的比喻就是:
插入、删除数据 数组就像是搬运工一样将东西搬到另外一个地方,而链表就像是有很多的抽屉,每一个抽屉都有下一个抽屉的钥匙,所以每一次都需要打开抽屉取出钥匙,然后再打开下一个抽屉,就这样一直下去。
但是很多人都认为搬用东西的数组肯定没有开抽屉的链表快,因为人们都无形中觉得数组搬运的东西又重距离也远,所以这就是人们觉得数组的效率很差,而链表的就很快了。但是实际并不是这样的,数组移动的距离很短而且东西也很轻,所以数组的访问还是很快的。
下面的一个例子来说明这些吧。。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Random;
public class Test {
}
输出的结果为:
经过多次的测试,结果都是为ArrayList插入数据要比LinkedList要快一些,当着这里可能也有别的误差在里面。所以我们要靠自己程序进行测试才能得到相应的结论。