@Test
public void mapTest(){
/*
* 比较顺序查找和散列查找的性能
*/
//创建线性表集合
List
new ArrayList
//创建散列表集合
Map
new HashMap
//向集合中同时添加数据
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。