在java中检索hashmap值

时间:2013-02-22 10:36:50

标签: java hashmap

我在下面编写代码来检索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

5 个答案:

答案 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,这与getKeygetValue不同。

您需要执行以下操作:

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>
}