以下代码演试ArryList,LinkedList,Vector,HaspMap, Hashtable五个类,在进行同等次数的循环后的时间对比import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.Vector;public class T1
{ /**
* @param args
*/
public static void main(String[] args)
{
Vector v=new Vector();
LinkedList llist=new LinkedList();
ArrayList alist=new ArrayList();
Hashtable table=new Hashtable();
HashMap map=new HashMap();
//Vector
long s1=System.currentTimeMillis();
for(int i=0;i<300000;i++)
v.add("haha");
long s2=System.currentTimeMillis();
System.out.println("Vector write cost:"+(s2-s1));
long s3=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(v.get(i));}
long s4=System.currentTimeMillis();
System.out.println("Vector read cost:"+(s4-s3));
//ArrayList
long s5=System.currentTimeMillis();
for(int i=0;i<300000;i++)
alist.add("haha");
long s6=System.currentTimeMillis();
System.out.println("ArrayList write cost:"+(s6-s5));
long s7=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(alist.get(i));}
long s8=System.currentTimeMillis();
System.out.println("ArrayList read cost:"+(s8-s7));
//LinkedList
long s9=System.currentTimeMillis();
for(int i=0;i<300000;i++)
llist.add("haha");
long s10=System.currentTimeMillis();
System.out.println("LinkedList write cost:"+(s10-s9));
long s11=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(llist.get(i));}
long s12=System.currentTimeMillis();
System.out.println("LinkedList read cost:"+(s12-s11));
//Hashtable
long s13=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{
table.put(String.valueOf(i),"haha");
}
long s14=System.currentTimeMillis();
System.out.println("HashTable write cost:"+(s14-s13));
long s15=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(table.get(String.valueOf(i)));}
long s16=System.currentTimeMillis();
System.out.println("HashTable read cost:"+(s16-s15));
//HashMap
long s17=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{
map.put(String.valueOf(i),"haha");
}
long s18=System.currentTimeMillis();
System.out.println("HashMap write cost:"+(s18-s17));
long s19=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(table.get(String.valueOf(i)));}
long s20=System.currentTimeMillis();
System.out.println("HashMap write cost:"+(s20-s19));
}}
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.Vector;public class T1
{ /**
* @param args
*/
public static void main(String[] args)
{
Vector v=new Vector();
LinkedList llist=new LinkedList();
ArrayList alist=new ArrayList();
Hashtable table=new Hashtable();
HashMap map=new HashMap();
//Vector
long s1=System.currentTimeMillis();
for(int i=0;i<300000;i++)
v.add("haha");
long s2=System.currentTimeMillis();
System.out.println("Vector write cost:"+(s2-s1));
long s3=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(v.get(i));}
long s4=System.currentTimeMillis();
System.out.println("Vector read cost:"+(s4-s3));
//ArrayList
long s5=System.currentTimeMillis();
for(int i=0;i<300000;i++)
alist.add("haha");
long s6=System.currentTimeMillis();
System.out.println("ArrayList write cost:"+(s6-s5));
long s7=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(alist.get(i));}
long s8=System.currentTimeMillis();
System.out.println("ArrayList read cost:"+(s8-s7));
//LinkedList
long s9=System.currentTimeMillis();
for(int i=0;i<300000;i++)
llist.add("haha");
long s10=System.currentTimeMillis();
System.out.println("LinkedList write cost:"+(s10-s9));
long s11=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(llist.get(i));}
long s12=System.currentTimeMillis();
System.out.println("LinkedList read cost:"+(s12-s11));
//Hashtable
long s13=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{
table.put(String.valueOf(i),"haha");
}
long s14=System.currentTimeMillis();
System.out.println("HashTable write cost:"+(s14-s13));
long s15=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(table.get(String.valueOf(i)));}
long s16=System.currentTimeMillis();
System.out.println("HashTable read cost:"+(s16-s15));
//HashMap
long s17=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{
map.put(String.valueOf(i),"haha");
}
long s18=System.currentTimeMillis();
System.out.println("HashMap write cost:"+(s18-s17));
long s19=System.currentTimeMillis();
for(int i=0;i<300000;i++)
{String s=(String)(table.get(String.valueOf(i)));}
long s20=System.currentTimeMillis();
System.out.println("HashMap write cost:"+(s20-s19));
}}
Vector read cost:16
ArrayList write cost:140
ArrayList read cost:16
LinkedList write cost:203
LinkedList read cost:746563
HashTable write cost:1734
HashTable read cost:343
HashMap write cost:4407
HashMap read cost:2984
Vector read cost:15
ArrayList write cost:78
ArrayList read cost:16
LinkedList write cost:141
LinkedList read cost:0
HashTable write cost:750
HashTable read cost:156
HashMap write cost:812
HashMap write cost:719
LinkedListread太慢,我屏蔽了
class Hello {
public static void main(String[] args) throws Exception {
VectorWTest ls1 = new VectorWTest();
ArrayListWTest ls2 = new ArrayListWTest(); Thread t1 = new Thread(ls1);
Thread t2 = new Thread(ls2);
t1.start();
t2.start();
}
}
class VectorWTest implements Runnable {
public void run() {
Vector v = new Vector(500000);
long s1 = System.currentTimeMillis();
for (int i = 0; i < 300000; i++)
v.add("haha");
long s2 = System.currentTimeMillis();
System.out.println("Vector write cost:" + (s2 - s1));
long s3 = System.currentTimeMillis();
for (int i = 0; i < 300000; i++) {
String s = (String) (v.get(i));
}
long s4 = System.currentTimeMillis();
System.out.println("Vector read cost:" + (s4 - s3));
}
}class ArrayListWTest implements Runnable {
public void run() {
ArrayList alist = new ArrayList(500000);
long s5 = System.currentTimeMillis();
for (int i = 0; i < 300000; i++)
alist.add("haha");
long s6 = System.currentTimeMillis();
System.out.println("ArrayList write cost:" + (s6 - s5));
long s7 = System.currentTimeMillis();
for (int i = 0; i < 300000; i++) {
String s = (String) (alist.get(i));
}
long s8 = System.currentTimeMillis();
System.out.println("ArrayList read cost:" + (s8 - s7));
}
}
有的时候理论更重要
但是如果你从中间频繁的删除,LinkedList会比ArrayList快很多的
《think in java 》 第8章 对象的容纳 有介绍
http://lizzie0510.blogchina.com/261252.html(我临时随便找了下)
http://book.chinaz.com/JAVA/javalx/8-1.gif(这个不错)
另外:jdk文档是个不错的选择。
ArrayList适用于随机存取;
LinkedArrayList适用于随机存取,尤其是大量的add/delete时。
HashTable与HashMap相比,HashTable要慢一些,因为它是同步的,而HashMap不同步,在没有同步要求情况下用HashMap代替HashTable。