我在下面编写代码来检索hashmap中的值。但它没有用。
HashMap<String, String> facilities = new HashMap<String, String>();
Iterator i = facilities.entrySet().iterator();
while(i.hasNext())
{
String key = i.next().toString();
String value = i.next().toString();
System.out.println(key + " " + value);
}
我修改了代码以包含SET类,它工作正常。
Set s= facilities.entrySet();
Iterator it = facilities.entrySet().iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
任何人都可以在没有SET类的情况下指导我上面的代码出了什么问题吗?
P.S - 我没有太多编程exp并且最近开始使用java
答案 0 :(得分:10)
您正在拨打next()
两次。
请改为尝试:
while(i.hasNext())
{
Entry e = i.next();
String key = e.getKey();
String value = e.getValue();
System.out.println(key + " " + value);
}
简而言之,您还可以使用以下代码(也保留类型信息)。以某种方式使用Iterator
是Java-1.5之前的样式。
for(Entry<String, String> entry : facilities.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + " " + value);
}
答案 1 :(得分:2)
问题是你正在调用i.next()
获取密钥,然后再次调用它来获取值(下一个条目的值)。
另一个问题是你在toString
的其中一个上使用Entry
,这与getKey
或getValue
不同。
您需要执行以下操作:
Iterator<Entry<String, String>> i = facilities.entrySet().iterator();
...
while (...)
{
Entry<String, String> entry = i.next();
String key = entry.getKey();
String value = entry.getValue();
...
}
答案 2 :(得分:0)
Iterator i = facilities.keySet().iterator();
while(i.hasNext())
{
String key = i.next().toString();
String value = facilities.get(key);
System.out.println(key + " " + value);
}
答案 3 :(得分:0)
你在循环中多次调用i.next()
。我认为这会造成麻烦。
你可以试试这个:
HashMap<String, String> facilities = new HashMap<String, String>();
Iterator<Map.Entry<String, String>> i = facilities.entrySet().iterator();
Map.Entry<String, String> entry = null;
while (i.hasNext()) {
entry = i.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + " " + value);
}
答案 4 :(得分:0)
String key;
for(final Iterator iterator = facilities.keySet().iterator(); iterator.hasNext(); ) {<BR>
key = iterator.next();<BR>
System.out.println(key + " : " + facilities.get(key));<BR>
for (Entry<String, String> entry : facilities.entrySet()) {<BR>
System.out.println(entry.getKey() + " : " + entry.getValue();<BR>
}