0

ここに私のJavaコードがあります:

public static void main(String[] args) {  
    Map<String, String> map = new HashMap<String, String>();  
    map.put("_name", "name");  
    map.put("_age", "age");  
    Set<String> set = map.keySet();  
    Iterator iterator = set.iterator();  
    // the first iteration  
    StringBuffer str1 = new StringBuffer();  
    while (iterator.hasNext()) {  
        str1.append(iterator.next() + ",");  
    }  
    String str1To = str1.substring(0, str1.lastIndexOf(",")).toString();  
    System.out.println(str1To);  
    // the second iteration  
    StringBuffer str2 = new StringBuffer();  
    while (iterator.hasNext()) {  
        str2.append(iterator.next() + ",");  
    }  
    String str2To = str2.substring(0, str2.lastIndexOf(",")).toString();// ?????  
    System.out.println(str2To);  
}

私の質問は、2 番目のループが繰り返されないのはなぜですか? 最初の反復はすでにiterator終了していますか? これは 2 回目の反復に影響を与えるものですか?

どうすれば修正できますか?

4

3 に答える 3

3

最初のループは、リストの最後に到達whileするまで繰り返します。iteratorその瞬間、iteratorin 自体が の終わりを指しています。listあなたの場合はmap.keySet(). そして、それが、への呼び出しが返さwhileれるため、次のループが失敗する理由です。iterator.hasNext()false

より良い方法は、ループEnhanced For Loopの代わりに次のようなものを使用することです。while

for(String key: map.keySet()){
    //your logic
}
于 2012-08-31T03:11:28.780 に答える
0

イテレータは一度だけ使用できます。そのため、もう一度イテレータを要求してください。

于 2012-08-31T03:11:39.383 に答える
0

set.iterator()コレクションを反復処理するたびに呼び出す必要があります。反復ごとに異なる変数を使用することもお勧めします。

于 2012-08-31T03:11:50.990 に答える