arraylist用iterator顺序循环的时候还可以
用get来循环 杯具了
[quote]
一般大家都知道ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
不多说,先上测试代码
[/quote]
[quote]
测试结果
=========ArrayList AddLast=================
203ms
=========LinkedList AddLast================
125ms
=========ArrayList AddFirst=================
2625ms
=========LinkedList AddFirst================
62ms
=========ArrayList Get====================
15ms
=========LinkedList Get===================
37891ms
=========ArrayList Remove=================
2562ms
=========LinkedList Remove================
16ms
小结:
ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:
1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。
2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
3.LinkedList不支持高效的随机元素访问。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/Dantin/archive/2009/05/05/4152254.aspx
[/quote]
用get来循环 杯具了
[quote]
一般大家都知道ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
不多说,先上测试代码
[/quote]
package org.dean.collect;
import java.util.*;
class Person {
private String name;
public Person(String n) {
this.name = n;
}
public String getName() {
return this.name;
}
}
public class ListTest {
public static void main(String[] args) {
LinkedList<Person> l = new LinkedList<Person>();
Iterator<Person> itl;
System.out.println("=========ArrayList AddLast=====================");
long start = System.currentTimeMillis();
ArrayList<Person> a = new ArrayList<Person>();
Iterator<Person> ita;
for (int n = 0; n < 50000; n++) {
a.add(new Person(Integer.toString(n)));
}
long end = System.currentTimeMillis();
System.out.println(end - start + "ms");
System.out.println("=========LinkedList AddLast=====================");
start = System.currentTimeMillis();
for (int n = 0; n < 50000; n++) {
l.add(new Person(Integer.toString(n)));
}
end = System.currentTimeMillis();
System.out.println(end - start + "ms");
System.out.println("=========ArrayList AddFirst=====================");
start = System.currentTimeMillis();
ArrayList<Person> a2 = new ArrayList<Person>();
for (int n = 0; n < 50000; n++) {
a2.add(0,new Person(Integer.toString(n)));
}
end = System.currentTimeMillis();
System.out.println(end - start + "ms");
System.out.println("=========LinkedList AddFirst=====================");
start = System.currentTimeMillis();
LinkedList<Person> l2 = new LinkedList<Person>();
for (int n = 0; n < 50000; n++) {
l2.addFirst(new Person(Integer.toString(n)));
}
end = System.currentTimeMillis();
System.out.println(end - start + "ms");
itl = l.iterator();
ita=a.iterator();
System.out.println("=========ArrayList Get=====================");
start = System.currentTimeMillis();
for(int i=0;i<a.size();i++){
a.get(i);
}
end = System.currentTimeMillis();
System.out.println(end - start + "ms");
System.out.println("=========LinkedList Get======================");
start = System.currentTimeMillis();
for(int i=0;i<l.size();i++){
l.get(i);
}
end = System.currentTimeMillis();
System.out.println(end - start + "ms");
System.out.println("=========ArrayList Remove=====================");
start = System.currentTimeMillis();
while (ita.hasNext()) {
ita.next();
ita.remove();
}
end = System.currentTimeMillis();
System.out.println(end - start + "ms");
System.out.println("=========LinkedList Remove======================");
start = System.currentTimeMillis();
while (itl.hasNext()) {
itl.next();
itl.remove();
}
end = System.currentTimeMillis();
System.out.println(end - start + "ms");
}
}
[quote]
测试结果
=========ArrayList AddLast=================
203ms
=========LinkedList AddLast================
125ms
=========ArrayList AddFirst=================
2625ms
=========LinkedList AddFirst================
62ms
=========ArrayList Get====================
15ms
=========LinkedList Get===================
37891ms
=========ArrayList Remove=================
2562ms
=========LinkedList Remove================
16ms
小结:
ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下:
1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。
2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
3.LinkedList不支持高效的随机元素访问。
4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/Dantin/archive/2009/05/05/4152254.aspx
[/quote]