java集合性能比较

package frank; import java.lang.*; import java.util.LinkedList; import java.util.ArrayList; import java.util.Iterator; /** * 各种集合的性能对比 * */ public class App { public static void main(String[] args)throws Exception { String[] tst1 = new String[900000]; for(int i = 0;i<900000;i++) { tst1[i]=String.valueOf(i); } ArrayList al = new ArrayList(); for(int i = 0;i<900000;i++) { al.add(tst1[i]); } LinkedList ll = new LinkedList(); for(int i = 0;i<900000;i++) { ll.add(tst1[i]); } long start = System.currentTimeMillis(); Iterator it = al.iterator(); for(;it.hasNext();) { it.next(); } System.out.println("迭代ArrayList集合元素的时间:"+(System.currentTimeMillis() - start)); start = System.currentTimeMillis(); it = ll.iterator(); for(;it.hasNext();) { it.next(); } System.out.println("迭代Linked集合元素的时间:"+(System.currentTimeMillis()-start)); /** * 运行结果: * 迭代ArrayList集合元素的时间:8 迭代Linked集合元素的时间:10 运行上面程序则需要修改JVM默认的内存大小 java -Xms128m -Xmx512m -cp ../class frank.App -Xms 设置JVM的堆内存初始大小 -Xmx 设置JVM的堆内存最大大小 如果用到ArrayList、Vector集合应该使用随机访问方法(get)来遍历,这样子性能更好。对于LinkedList则使用Iterator迭代器来遍历。如果经常使用插入、删除操作则使用LinkedList性能更好,如果使用ArrayList的话需要重新分配数组大小,其时间开销比LinkedList的时间开销大几十倍。 如果需要用多线程访问List则考虑使用Collections将集合包装成线程安全的集合。 * */ } }