3

HashMap で重複を検索したい。現在、これは私の HashMap です:

HashMap<String, HashMap<String, String>>

i2 つのイテレータ、1 つともう1 つのj、および 2 つのループを作成するつもりでした。最初の while ループは のインデックスをi持ち、次に 2 番目のループは のインデックスを持ちますが、jループjが始まる前です。==i

Iterator<Entry<String, HashMap<String, String>>> i = listings.entrySet().iterator();
while(i.hasNext()) {
    HashMap<String, String> entry = i.next().getValue();
    Iterator<Entry<String, HashMap<String, String>>> j = i;

    while(j.hasNext()) {
        j.next();
        // DO STUFF
    }
}

しかし、 を呼び出すj.next()と のインデックスも変更されるため、これは機能しませんi

4

5 に答える 5

2

HashMap の重複を検索したい

重複する値を意味すると仮定すると、次のことができます

public static <K, V> List<V> duplicatedValues(Map<K, ? extends V> map) {
  Collection<? extends V> values = map.values();
  Set<? extends V> valueSet = new HashSet<V>(values);
  List<V> dupes = new ArrayList<V>();
  if (valueSet.size() != map.size()) {
    for (V value : values) {
      if (!valueSet.remove(value)) {
        // Already seen
        dupes.add(value);
      }
    }
  }
  return dupes;
}
于 2013-08-08T20:57:02.907 に答える
2
j = i

同じ反復子への参照が 2 つあります。

別の反復子が必要な場合は、.iterator()もう一度呼び出す必要があります。

于 2013-08-08T20:51:08.167 に答える
0

2 つの参照で同じ反復子を指しているi and jため、オブジェクトの状態を変更すると、他の参照にも更新された状態が表示されます。

于 2013-08-08T20:53:29.687 に答える
0

最初のハッシュマップのハッシュマップ エントリからの反復子が必要です。

Iterator<Entry<String, HashMap<String, String>>> i = listings.entrySet().iterator();
while(i.hasNext()) {
    HashMap<String, String> entry = i.next().getValue();

    Iterator<Entry<String, HashMap<String, String>>> j = entry.iterator();
    while(j.hasNext()) {
        j.next();
         // DO STUFF
    }
}
于 2013-08-08T20:55:44.767 に答える