我试运行了下,并且把注释挪了一下位置,两段代码都是可以运行的。
你说的的第二段代码也是可以的。
你说的那种情况是当你写的Map接口没有注释的时候会出现
/* Map集合的两种取出方式: 1 Set<K> keySet:将map中所有的键存入到Set集合。 因为Set集合具备迭代器,所以可以迭代方式取出所有的键,再根据get方法,获取每一个键对应的值 2 Set<Map.Entry<K,V>> entrySet:将Map集合中的映射关系存入到了Set集合中,而这个关系的数据类型就是:Map.Entry */ import java.util.*; class MapDemo2 { public static void main(String[] args) { HashMap<String,String> map=new HashMap<String,String>(); map.put("o2","zhangshan02"); map.put("o3","zhangshan04"); map.put("o1","zhangshan01"); map.put("o4","zhangshan04"); Set<Map.Entry <String,String>> entrySet=map.entrySet(); //Map集合取出方式2:将Map集合中的映射关系取出,存入到Set集合中。 for(Iterator<Map.Entry <String,String>> it =entrySet.iterator();it.hasNext();) { Map.Entry <String,String> me =it.next(); //Map.Entry是一个接口,详见API文档 String key =me.getKey(); //调用Map.Entry接口的方法 String value =me.getValue(); System.out.println(key+":"+value); } } } /* interface Map //这里当没有注释的时候会出现你说的问题,注释就好了。 { public static interface Entry { public abstract Object getKey(); public abstract Object getValue(); } } entrySet方法的返回值是Set集合,Set集合存入的类型是Map.Entry<K,V>, K,V分别指键类型和值类型。本例中key的类型和value的类型同为String Map.Entry<K,V> 是一个接口,存入类型必须是<K,V> */ /* Map集合取出方式1: //先获取Map集合的所有键的Set集合,keySet(); Set<String> keySet =map.keySet(); //有了Set集合就可以获取其迭代器 for(Iterator<String> it =keySet.iterator();it.hasNext();) { String key =it.next(); //有了键可以通过Map集合的get方法获取其对应的值。 String value =map.get(key); System.out.println("key:"+key+",value:"+value); /* Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。 */
|