书上都说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要慢呢,和书上讲的不一样呀,是不是我理解有误呢,哪位仁兄解释下?
而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要慢呢,和书上讲的不一样呀,是不是我理解有误呢,哪位仁兄解释下?
2:事先不能预知元素数量时,根据不同的迭代需要选择 ArrayList 或者 LinkedList
3:如果有很多的 remove 操作时,应优先选择 LinkedList
4:需要顺序迭代,也就是从第一个元素开始一个一个地访问到最后一个时,应优先选择 LinkedList
5:需要随机访问,也就是使用 get(int) 方法取任意下标访问时,应优先选择 ArrayList
除第三点外,其他认同。更详细的测试可以看:http://blog.csdn.net/inkfish/archive/2010/01/13/5185320.aspx
基本只用arraylist,没怎么用过linkedlist,下次设计时需要多一些考虑了。
下次可以试下。。偶同样比较少用LinkList。下次也试下