一、数据准备
HashMap<String, Integer> map = new HashMap<>();
for(int i=0;i<10000000;i++) {
map.put("key"+i, i);
}
二、遍历方法
1、调用keySet( )方法返回此映射所包含的键:一般用法,两次取值(分别取key和value):
System.out.println("********方式一:keySet():********");
long start=System.currentTimeMillis();
for (String key : map.keySet()) {
//System.out.println("(" + key + "," + map.get(key) + ")");
map.get(key);
2、调用entrySet()方法返回此映射所包含的映射关系(高效,推荐使用):
System.out.println("********方式二:entrySet():********");
long start=System.currentTimeMillis();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
//System.out.println("(" + entry.getKey() + "," + entry.getValue() + ")");
entry.getKey();
entry.getValue();
}
long end=System.currentTimeMillis();
System.out.println("耗时:"+(end-start));
3、调用values()方法返回此映射所包含的值(仅得到value值):
System.out.println("********方式三:values():********");
long start=System.currentTimeMillis();
for (int value : map.values()) {
//System.out.println(value);
}
long end=System.currentTimeMillis();
System.out.println("耗时:"+(end-start));
4、调用Iterator类的方法:(高效,遍历同时可删元素):
System.out.println("********方式四:Iterator:********");
long start=System.currentTimeMillis();
Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Integer> entry = it.next();
//System.out.println("(" + entry.getKey() + "," + entry.getValue() + ")");
entry.getKey();
entry.getValue();
}
long end=System.currentTimeMillis();
System.out.println("耗时:"+(end-start));
三、运行结果及分析
通过运行结果可以看出来,方式一效率较低,而方式二和方式四运行效率相对较高。
四、小结
1、仅仅需要得遍历key,则可选择调用keySet()方法;
2、仅仅需要得到value,则可选择调用values()方法;
3、需要同遍历key和value值,推荐使用entrySet()方法;
4、需要在遍历key和value值时同时删除元素,推荐使用迭代器Iterator