首先创建一个没有加泛型的HashMap
Map map=new HashMap();
今天发现遍历的时候
for(Entry entry:map.entrySet())
会报错,必须加泛型才可以不知道为什么,而下面这张不加泛型都可以
Iterator iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Entry entry=(Entry) iterator.next();
}
Map map=new HashMap();
今天发现遍历的时候
for(Entry entry:map.entrySet())
会报错,必须加泛型才可以不知道为什么,而下面这张不加泛型都可以
Iterator iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Entry entry=(Entry) iterator.next();
}
这样定义的
interface Entry<K, V> {
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
}
接口定义的时候就已经包含泛型了
Map中的entrySet方法这样定义的:
Set<Map.Entry<K, V>> entrySet();
返回值定义也是包含了泛型,所以不添加泛型的Map是不能这样遍历的。不添加泛型的Map可以这样遍历
Map map = new HashMap();
map.put(1, 2);
for (Object o : map.keySet()) {
System.out.println(o + "," + map.get(o));
}
for(Entry entry:map.entrySet()) 执行了2步操作,1得到 set ,但是set 的类型 没有指定,那么默认就是 object,2 for循环 set 你使用了 Entry 去遍历 类型为 Object的 set报错
Map map=new HashMap();
map.put("A",1);
map.put("B",2);
Set<Map.Entry> set = map.entrySet();
for(Map.Entry entry: set){
System.out.println(entry.getKey()+" "+entry.getValue());
}