遍历Map的几种方法 entrySet 和 keySet

遍历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进行处理了。

猜你喜欢

转载自blog.csdn.net/h517604180/article/details/80605399