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()2回電話をかけています。

代わりにこれを試してください:

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()、キーを取得するために呼び出してから、値(次のエントリの値)を取得するためにもう一度呼び出すことです。

もう1つの問題は、またはと同じではないのtoString1つで使用することです。EntrygetKeygetValue

次のようなことをする必要があります。

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
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 に答える
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 に答える