遍历Map时,一般会用到两种方法
Map.entrySet()
Map.keySet()
首先这两种方法返回的都是Set集合,
区别在于,第一种集合里是 Map.entry (会有key-value的键值对)类型的对象;
而第二种集合里是String对象(假设创建Map时key值是String类型的)。
下面上代码看一下:
public class testforcycle {
public static void main(String[] args) {
HashMap<String, Object> hs = new HashMap();
hs.put("a", 1);
hs.put("b", 2);
System.out.println("foreach0");
foreach0(hs);
System.out.println("foreach1");
foreach1(hs);
System.out.println("foreach2");
foreach2(hs);
System.out.println("foreach3");
foreach3(hs);
}
//entrySet 一般写法,建立迭代器
public static void foreach0(HashMap<String, Object> hs){
for(Iterator it = hs.entrySet().iterator();it.hasNext();){
System.out.println(it.next());
}
}
//entrySet 简便写法,本质也是创建迭代器,跟第一种相同
public static void foreach1(HashMap<String, Object> hs){
for(Entry<String, Object> a:hs.entrySet()){
System.out.println(a.getClass());
System.out.println(a);
}
}
// keySet 简便写法
public static void foreach2(HashMap<String, Object> hs){
for(String a:hs.keySet()){
System.out.println(a);
}
}
//keySet foreach2的完整写法
public static void foreach3(HashMap<String, Object> hs){
for(Iterator it=hs.keySet().iterator();it.hasNext();){
System.out.println(it.next());
}
}
}
foreach0
a=1
b=2
foreach1
class java.util.HashMap$Node
a=1
class java.util.HashMap$Node
b=2
foreach2
a
b
foreach3
a
b
说明:
foreach0 和 foreach1 都是取按照 entrySet 方式取的,结果就是键值对,类型也是 java.util.HashMap$Node ,是Entry的一种实现类。
foreach2 和 foreach3 是keyset的,返回结果是String类型的,之后就可以用这个key值来取map的value进行处理了。