ArrayList与LinkedList的效率比较
书上都说ArrayList是以数组形式存储数据,查询数据快,增加和删除数据慢.
而LinkedList是以链表形式存储数据,查询数据慢,增加和删除数据快.
于是我写了个测试程序来验证一下,代码如下:
public class Test {
public static void main(String[] args) {
ArrayList<String> aList = new ArrayList<String>(1000);
LinkedList<String> lList = new LinkedList<String>();
long aStart = System.nanoTime();
for(int i = 0; i < 1000; i++)
{
aList.add("a");
}
System.out.println("ArrayList添加元素花: " + (System.nanoTime() - aStart) + "ns");
aStart = System.nanoTime();
for(int i = 0; i < 1000; i++)
{
lList.add("b");
}
System.out.println("LinkedList添加元素花: " + (System.nanoTime() - aStart) + "ns");
aStart = System.nanoTime();
Iterator<String> it = aList.iterator();
while(it.hasNext()) {
it.next();
}
System.out.println("ArrayList迭代元素花: " + (System.nanoTime() - aStart) + "ns");
aStart = System.nanoTime();
Iterator<String> lit = aList.iterator();
while(lit.hasNext()) {
lit.next();
}
System.out.println("LinkedList迭代元素花: " + (System.nanoTime() - aStart) + "ns");
}
}
输出结果如下:
ArrayList添加元素花: 161165ns
LinkedList添加元素花: 433769ns
ArrayList迭代元素花: 456203ns
LinkedList迭代元素花: 297991ns
为什么ArrayList添加元素比LinkedList要快,而在迭代元素时比LinkedList要慢呢,和书上讲的不一样呀,是不是我理解有误呢,哪位仁兄解释下?