1

我写了下面的代码来检索哈希图中的值。但它没有用。

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 类的情况下上面的代码出了什么问题?

PS - 我没有太多的编程经验,最近开始使用java

4

5 回答 5

11

你打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);
}
于 2013-02-22T10:39:06.313 回答
2

问题是您调用i.next()以获取密钥,然后再次调用它以获取值(下一个条目的值)。

另一个问题是您toStringEntry's 上使用它,它与getKeyor不同getValue

您需要执行以下操作:

Iterator<Entry<String, String>> i = facilities.entrySet().iterator();
...
while (...)
{
   Entry<String, String> entry = i.next();
   String key = entry.getKey();  
   String value = entry.getValue();
   ...
}
于 2013-02-22T10:39:47.097 回答
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);
}
于 2013-02-22T10:40:24.673 回答
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>
}
于 2013-02-22T10:42:33.397 回答
0
Iterator i = facilities.keySet().iterator();

while(i.hasNext())
{
    String key = i.next().toString();  
    String value = facilities.get(key);
    System.out.println(key + " " + value);
}
于 2013-02-22T10:39:48.627 回答