关于Iterator 输出

来源:百度知道 编辑:UC知道 时间:2024/09/18 05:30:06
首先,假如我定义一个 List<String> list=new ArrayList<String>();
放如对象后,我输出的时候要 Iterator<String> it=list.iterator();
指定Iterator为String 这样就没有警告了!

但是 当我定义个 HashMap<String,String> hm=new HashMap<String,String>();
hm.put("one","zhangsan");
hm.put("two","lisi");
hm.put("three","wangwu");
Set entry=hm.entrySet(); /*返回一个set
Iterator it=entry.iterator(); /*这里为什么不要指定类型也没警告 按照上面的说法,这里应该也要指定类型啊!
Iterator it=entry.iterator(); 既然返回的是Map.Entry类型,怎么不能直接 Iterator<Map.Entry> it=entry.iterator();
然后在对它进行操作时候,不用类型转换? 为什么不行呢?

不指定类型是有警告的,除非你的IDE版本有问题
可以这样写:
HashMap<String,String> hm=new HashMap<String,String>();
hm.put("one","zhangsan");
hm.put("two","lisi");
hm.put("three","wangwu");
Set<Map.Entry<String, String>> s = hm.entrySet();
Iterator<Map.Entry<String, String>> i = s.iterator();
while(i.hasNext()) {
Map.Entry<String, String> me = i.next();
System.out.println(me.getKey() + ": " + me.getValue());
}

Iterator it=entry.iterator();返回的应该是:Iterator 对象

而且HashMap,并没有实现iterator()方法

这里当然没有警告,因为你Iterator 上指定的泛型是String ,而HashMap指定的泛型也是String ,编译器就认定这两个容器只能容纳String 类型的数据,既然如此,那你在取值的时候自然不会有错,相互赋值也不会有问题。