Map 集合的遍历
这里是重点,拿本子记一下。
方法一:获取所有的 key(是一个 Set 集合),通过遍历 key ,来遍历 value
这里又可以分两种方式:使用
迭代器
或者增强 for 循环foreach
方法一效率低一些
代码:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* 遍历 Map 的方法
*/
public class MapTest02 {
public static void main(String[] args) {
Map<Integer, String> map1 = new HashMap();
map1.put(1,"zhangsan");
map1.put(2,"lisi");
map1.put(3,"wangwu");
map1.put(4,"zhaoliu");
// 获取所有的key,返回的是一个 Set 集合
Set<Integer> keys = map1.keySet();
// 遍历键,获取值
// 第一张方式:通过迭代器遍历
Iterator<Integer> it = keys.iterator();
while (it.hasNext()){
Integer key = it.next();
String value = map1.get(key);
System.out.println(key + "=" + value);
}
System.out.println("--------------------------------------------------");
// 第二种方式:foreach
for (Integer key : keys){
String value = map1.get(key);
System.out.println(key + "=" + value);
}
}
}
运行结果:
1=zhangsan
2=lisi
3=wangwu
4=zhaoliu
--------------------------------------------------
1=zhangsan
2=lisi
3=wangwu
4=zhaoliu
方法二:
Set<Map.Entry<K,V>> entrySet();
说明:
- 将 Map 集合直接全部转换成 Set 集合
- Set 集合中元素的类型:Map.Entry
- Map.Entry是一个静态内部类,通过
HashMap
的源代码片段可以看出来:
static class Node<K, V> implements Entry<K, V> {
final int hash;
final K key;
V value;
HashMap.Node<K, V> next; // 单向链表
这里又可以分两种方式:使用
迭代器
或者增强 for 循环foreach
方法二效率高一些
代码:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapTest03 {
public static void main(String[] args) {
Map<Integer, String> map2 = new HashMap();
map2.put(1, "zs");
map2.put(2, "ls");
map2.put(3, "ww");
map2.put(4, "zl");
// Map --> Set
Set<Map.Entry<Integer, String>> set1 = map2.entrySet();
// foreach 遍历Set
for (Map.Entry<Integer, String> me : set1){
// System.out.println(me); // 这是我自己写的,发现竟然也可以输出想要的信息:key + value
System.out.println(me.getKey());
System.out.println(me.getValue());
}
// 迭代器遍历 Set
Iterator<Map.Entry<Integer, String>> it = set1.iterator();
while (it.hasNext()){
Map.Entry<Integer, String> node = it.next();
Integer key = node.getKey();
String value = node.getValue();
System.out.println(key + "=" + value);
}
}
}
运行结果:
1
zs
2
ls
3
ww
4
zl
1=zs
2=ls
3=ww
4=zl