首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

arraylist跟linkedlist

2012-12-28 
arraylist和linkedlistarraylist用iterator顺序循环的时候还可以用get来循环 杯具了package org.dean.coll

arraylist和linkedlist
arraylist用iterator顺序循环的时候还可以
用get来循环 杯具了

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"); } }
引用
测试结果

=========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了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Dantin/archive/2009/05/05/4152254.aspx

热点排行