1. 程式人生 > >Java中什麼集合查詢最快

Java中什麼集合查詢最快

上一篇文章中,我們瞭解了ArrayList的的遍歷速度比LinkedList快7000多倍。下面我們看一下什麼結合中查詢物件最快。呵呵程式碼如下:
  1. package dbtransfer;
  2. import java.util.ArrayList;
  3. import java.util.LinkedList;
  4. import java.util.Random;
  5. import java.util.HashMap;
  6. import java.util.HashSet;
  7. publicclass ListTest {
  8. privatestatic Random random = new Random();
  9. publicstaticvoid main(String[] args){
  10.         ArrayList<String> arraylist = new ArrayList();
  11.         LinkedList<String> linkedlist = new LinkedList();
  12.         HashMap<String,Object> map = new HashMap();
  13.         HashSet<String> set = new HashSet();
  14. for(int i=0;i<50000;i++){
  15.             String r = randomString();
  16.             arraylist.add(r);
  17.             linkedlist.add(r);
  18.             map.put(r, r);
  19.             set.add(r);
  20.         }
  21.         System.out.println("arraylist size "+arraylist.size());
  22.         System.out.println("linkedlist size "+linkedlist.size());
  23.         System.out.println("map size "+map.size());
  24.         System.out.println("set size "+set.size());
  25.         System.out.println("------");
  26. long
     begin = System.currentTimeMillis();
  27. for(int j=0;j<arraylist.size();j++){
  28.             arraylist.contains(arraylist.get(j));
  29.         }
  30.         System.out.println("arraylist time "+(System.currentTimeMillis()-begin));
  31.         begin = System.currentTimeMillis();
  32. for(int j=0;j<arraylist.size();j++){
  33.             linkedlist.contains(arraylist.get(j));
  34.         }
  35.         System.out.println("linkedlist time "+(System.currentTimeMillis()-begin));
  36.         begin = System.currentTimeMillis();
  37. for(int i=0;i<100;i++){
  38. for(int j=0;j<arraylist.size();j++){
  39.                 map.containsKey(arraylist.get(j));
  40.             }
  41.         }
  42.         System.out.println("map time "+(System.currentTimeMillis()-begin));
  43.         begin = System.currentTimeMillis();
  44. for(int i=0;i<100;i++){
  45. for(int j=0;j<arraylist.size();j++){
  46.                 set.contains(arraylist.get(j));
  47.             }
  48.         }
  49.         System.out.println("set time "+(System.currentTimeMillis()-begin));
  50.     }
  51. protectedstatic String randomString() {
  52. return Long.toString(random.nextLong(), 36);
  53.     }
  54. }
在我的機器上,結果如下:arraylist size 50000linkedlist size 50000map size 50000set size 50000------arraylist time 49328linkedlist time 57641map time 625set time 578可見呀,如果是在集合中查詢某個物件是否存在,是HashSet的速度最快,而且比List快將近1萬倍。再次證明了:Java集合不可以亂用呀!