------- android培训java培训、期待与您交流! ----------
map的遍历有四种放肆,下面我对其分别罗列出来:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("aa", "aaa");
map.put("bb", "bbb");
map.put("cc", "ccc");
// 第一种:通过Map.keySet遍历key和value
System.out.println("第一种方式:-------->通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= " + key + " and value= " + map.get(key));
}
// 第二种:通过Map.entrySet使用iterator遍历key和value
System.out.println("第二种方式:-------->通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= "
+ entry.getValue());
}
// 第三种:通过Map.entrySet遍历key和value
System.out.println("第三种方式:-------->通过Map.entrySet遍历key和value:");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= "
+ entry.getValue());
}
// 第四种:通过Map.values()遍历所有的value,但是不能遍历键key
System.out.println("第四种方式:-------->通过Map.values()遍历所有的value:");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
}
结果如下:
第一种方式:-------->通过Map.keySet遍历key和value:
key= aa and value= aaa
key= bb and value= bbb
key= cc and value= ccc
第二种方式:-------->通过Map.entrySet使用iterator遍历key和value:
key= aa and value= aaa
key= bb and value= bbb
key= cc and value= ccc
第三种方式:-------->通过Map.entrySet遍历key和value:
key= aa and value= aaa
key= bb and value= bbb
key= cc and value= ccc
第四种方式:-------->通过Map.values()遍历所有的value:
value= aaa
value= bbb
value= ccc
这四种方法都可以遍历map:
第一种是目前许多人最喜欢的一种方式,因为代码最少,看起来最简单,通过遍历keySet,再将key所对应的value查询出来,这里有一个二次取值的过程,所以并不推荐;
第二种和第三种原理是相同的,都是通过遍历Map.Entry的方式,将Entry中的key和value打印出来,第三种是比较推荐写法,因为采用jdk1.5后的遍历形式,代码看起来比较整洁;
第四种用的比较少了,因为我们大多数时候都是同时需要key和value的
综上所述,如果map里面内容比较少,其实采用哪种方式都可以,第一种和第三种相对简洁一些;但是一旦容量非常大时,更推荐采用第三种方式,相比于第一种将极大地节省性能。
测试性能程序:import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
long MAX = 100000L;
int TIMES = 10;
Map<String, String> map1 = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<String, String>();
for (long i = 0; i < MAX; i++){
map1.put("a" + i, "aa" + i);
map2.put("b" + i, "bb" + i);
}
String value = "";
String key= "";
long startTime, endTime;
double total = 0;
/**
* 通过Map.keySet遍历key和value
*/
for (int j = 0; j < TIMES; j++) {
startTime = System.currentTimeMillis();
for (String temp : map1.keySet()) {
key = temp;
value = map1.get(key);
}
endTime = System.currentTimeMillis();
System.out.println("通过Map.keySet遍历key和value耗时 " + (endTime - startTime)
+ " ms ");
}
/**
*通过Map.entrySet遍历key和value
*/
startTime = System.currentTimeMillis();
for (Map.Entry<String, String> entry : map2.entrySet()) {
key = entry.getKey();
value = entry.getValue();
}
endTime = System.currentTimeMillis();
System.out.println("通过Map.entrySet遍历key和value耗时 " + (endTime - startTime)
+ " ms ");
}
}
测试结果:
通过Map.keySet遍历key和value耗时 5 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.keySet遍历key和value耗时 4 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.keySet遍历key和value耗时 3 ms
通过Map.entrySet遍历key和value耗时 7 ms
如果把上面的数字改动的大一些,可能效果更明显,但是改大的话,电脑会卡死掉。