我有一个自定义地图,其中 Device 是我的名为 Device 的类的实例。
devices = new HashMap<String, Device>();
我尝试了 StackOverflow 建议的几个迭代器和 for 循环,但它们似乎都产生错误,我不知道为什么。
示例错误:
和
看起来 的声明devices
不正确。它应该是:
Map<String, Device> devices;
不是原始(“已擦除”)类型,Map
. 现代编译器应该给你使用原始类型的警告。注意编译器警告。
你可以试试这个:
HashMap<String, Device> devices = new HashMap<String, Device>();
// do stuff to load devices
Device currentDevice;
for (String key : devices.keySet()) {
currentDevice = devices.get(key);
// do stuff with current device
}
在第一种情况下,您只需给
for(Map.Entry entry:devices.entrySet()){}
就足够了,你不需要在那里投射 Map.Entry(String,Device) 。在第二种情况下,当您从条目中获取值时,它返回 Object 值,因此您需要强制转换为您的特定实例。所以您必须给出
设备设备=(设备)pairs.getValue()
有 3 种方法可以迭代地图 1) 使用 For-Each 循环迭代条目。2) 使用 For-Each 循环遍历键或值。3) 使用迭代器进行迭代。(为此,您可以使用泛型或不使用泛型进行迭代)
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}