循环遍历包含Entry对象的Set

时间:2016-08-06 08:11:25

标签: hashmap entryset

import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        HashMap<Integer,String> h = new HashMap<Integer,String>();
        h.put(100,"Hola");
        h.put(101,"Hello");
        h.put(102,"light");
        System.out.println(h); // {100=Hola, 101=Hello, 102=light}
        Set s = h.entrySet();
        System.out.println(s); // [100=Hola, 101=Hello, 102=light] 
        for(Map.Entry<Integer,String> ent : s)
        {
            System.out.println("Key=" + ent.getKey() + " Value=" + ent.getValue());
        }
     }
}

编译错误

HelloWorld.java:13: error: incompatible types: Object cannot be converted to Entry<Integer,String>                                                                                         
        for(Map.Entry<Integer,String> ent : s)                                                                                                                                             
                                            ^ 

我正在尝试为Set中的每个条目类型对象打印键值对。但它给出了上面显示的编译时错误。但是如果我替换&#34; s&#34;用&#34; h.entrySet()&#34;并且循环很好。如何使用引用来保持&#34; h.entrySet()&#34;导致编译错误?

1 个答案:

答案 0 :(得分:1)

该行

Set s = h.entrySet();

应该是

 Set<Map.Entry<Integer,String>> s = h.entrySet();

因为下面的每个循环都不知道Set的类型是什么?

此代码有效:

import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        HashMap<Integer,String> h = new HashMap<Integer,String>();
        h.put(100,"Hola");
        h.put(101,"Hello");
        h.put(102,"light");
        System.out.println(h); // {100=Hola, 101=Hello, 102=light}
        Set<Map.Entry<Integer,String>> s = h.entrySet();
        System.out.println(s); // [100=Hola, 101=Hello, 102=light] 
         for(Map.Entry<Integer,String> ent : s)
        {
            System.out.println("Key=" + ent.getKey() + " Value=" + ent.getValue());
        }
     }
}

每当你看到

incompatible types: Object cannot be converted to.. error

这意味着JVM正在尝试将Object类型转换为其他类型,这会导致编译错误。这是在for循环中发生的。