Map与List查找性能比较

来源:互联网 发布:甲骨文java培训骗局 编辑:程序博客网 时间:2024/06/05 04:17

@Test
 public void mapTest(){
  /*
   * 比较顺序查找和散列查找的性能
   */
  //创建线性表集合
  List<String> list=
   new ArrayList<String>();
  //创建散列表集合
  Map<String, Integer> map=
   new HashMap<String, Integer>();
  //向集合中同时添加数据
  for(int i=0; i<500000; i++){
   String key="Tom"+i;
   list.add(key);
   //将key,value成对的加入到map
   map.put(key, i);//Tom0, 0
  }
  //被查找的 key
  String key = "Tom499999";
  //线性表中顺序查找:
  long t1=System.nanoTime();
  int i=list.indexOf(key);
  long t2=System.nanoTime();
  System.out.println(i+","+(t2-t1)); //499999,11245379
  
  //散列表中的散列查找:
  t1=System.nanoTime();
  int n = map.get(key);
  t2=System.nanoTime();
  System.out.println(n+","+(t2-t1)); //499999,15317
 
 }

//散列表性能更高 

1,查找

     根据key的散列值(hashcode())映射到散列数组的下标再根据key的equals方法逐一比较key,最后找到value。

2,添加/替换:

    根据key的散列值(hashCode())映射到散列数组的下标,再根据key的equals方法逐一比较key,最后找到插入(替换)位置,插入(替换)key-value数据。

记住:无论查找还是添加都是先用key的hashCode再使用key的equals方法

注意:使用散列表时候,作为key的对象,必须重写equals和hashCode。