黑马程序员技术交流社区
标题:
Map中的EntrySet疑问
[打印本页]
作者:
黑马振鹏
时间:
2012-7-14 19:02
标题:
Map中的EntrySet疑问
import java.util.*;
public class MapDemo2 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put("01","dandan01");
map.put("02","dandan02");
map.put("03","dandan03");
map.put("04","dandan04");
map.put("05","dandan05");
Set<Map.Entry<String, String>> entryset = map.entrySet();
Iterator<Map.Entry<String, String>> it1 = entryset.iterator();
while(it1.hasNext()){
String key1 = it1.next().getKey();
String value1 = it1.next().getValue();
//System.out.println("key: "+key1+" value: "+value1);
System.out.println("key:"+key1);
System.out.println("value:"+value1);
}
}
}
提示异常:Exception in thread "main" java.util.NoSuchElementException。分开只打印key和value并没有问题,如果一起打印就会异常。
getKey().和getValue()含有特殊含义?
作者:
温少邦
时间:
2012-7-14 19:10
it1.next()会得到当前的Entry并把指针向后挪一个位置
你这样写一次移动了2个位置,改成这样就行:
Entry<String,String> entry = it1.next();
String key1 = entry.getKey();
String value1 = entry.getValue();
System.out.println("key: "+key1+" value: "+value1);
复制代码
作者:
张_涛
时间:
2012-7-14 19:16
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("01", "dandan01");
map.put("02", "dandan02");
map.put("03", "dandan03");
map.put("04", "dandan04");
map.put("05", "dandan05");
Set<Map.Entry<String, String>> entryset = map.entrySet();
Iterator<Map.Entry<String, String>> it1 = entryset.iterator();
while (it1.hasNext()) {
/**
* 注意:在使用迭代器的时候,循环中只使用一次it.next()方法,因为你调用一次该方法,再调用一次,两次的返回结果是不同的。
*/
Map.Entry<String, String> t = it1.next();
String key1 = t.getKey();
String value1 = t.getValue();
System.out.println("key: "+key1+" value: "+value1);
//下面两行没有错,只是影响控制台输出结果不容易观察,故注释。
//System.out.println("key:" + key1);
//System.out.println("value:" + value1);
}
}
复制代码
与getKey().和getValue()没有关系,只是迭代器的使用陷阱没有注意。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2