package com.deu.demo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* 测试keySet()与entrySet()的迭代时间
* keySet():迭代后只能通过get()取key
* entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口
* 最后说明下keySet()的速度比entrySet()慢了很多。看来以后要考虑用entrySet()了
*/
public class MyHashMap {
public static void main(String[] args) {
Map<String,Object> kmap=new HashMap<String,Object>();
Map<String,Object> emap=new HashMap<String,Object>();
Map<String,Object> map=new HashMap<String,Object>();
// for(int i=0;i<1000;i++){
// kmap.put(""+i, "YL");
// }
// for (int i = 0; i < 1000; i++) {
// emap.put(""+i, "ZT");
// }
//
//
// Iterator ktor=kmap.keySet().iterator();
// while(ktor.hasNext()){
// System.out.println(ktor.next());
// }
//
// long stimes = System.currentTimeMillis();
// long ctimes = Calendar.getInstance().getTimeInMillis();
// long dtimes = new Date().getTime();
// //初始时间 这里我用了三种取值方式 最后发现System.currentTimeMillis();是最直接的取值方法
// System.out.println(stimes+" "+ctimes+" "+dtimes);
1286526669250 1286526669265 1286526669265
//
// long stimes1 = System.currentTimeMillis();
// long ctimes1 = Calendar.getInstance().getTimeInMillis();
// long dtimes1 = new Date().getTime();
// //结束世界并且也是entrySet的开始时间
// System.out.println((stimes1-stimes)+" "+(ctimes1-ctimes)+" "+(dtimes1-dtimes));
// System.out.println(stimes1+" "+ctimes1+" "+dtimes1);
15 0 0
1286526669265 1286526669265 1286526669265
//
// Iterator<Entry<String, Object>> etor= emap.entrySet().iterator();
// while(etor.hasNext()){
// Entry ent=etor.next();
// System.out.println(ent.getKey()+" "+ent.getValue());
// }
//
// long stimes2 = System.currentTimeMillis();
// long ctimes2 = Calendar.getInstance().getTimeInMillis();
// long dtimes2 = new Date().getTime();
// System.out.println(stimes2+" "+ctimes2+" "+dtimes2);
// System.out.println((stimes2-stimes1)+" "+(ctimes2-ctimes1)+" "+(dtimes2-dtimes1));
1286526669281 1286526669281 1286526669281
16 16 16
//
// keySet比entrySet慢吗?
// keySet第一次遍历获得所有key, 快些
// entrySet第一次遍历获得所有key和value,慢些
// iterator之后,keySet的next()是key; entrySet的next()是Map.Entry(包含了key和value)。
// 改变代码之后的测试表明,entrySet的getValue()比Map的get()确实快
// 不过要按key排序的话,似乎keySet更方便一些。
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
map.put("d", "4");
map.put("e", "5");
Iterator iter=map.keySet().iterator();
while(iter.hasNext()){
String key=(String)iter.next();
System.out.println(key+" "+map.get(key));//key and value
}
// 对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。
// 而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。
Iterator eiter=map.entrySet().iterator();
while(eiter.hasNext()){
Entry ent=(Entry)eiter.next();
System.out.println("key=="+ent.getKey()+" "+"value=="+ent.getValue());
}
}
}