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