0

ハッシュマップを反復処理する方法は知っていますが、単一のハッシュマップに 2 つの反復子を設定できるかどうかはわかりません。

次のハッシュマップがあるとしましょう:

Map m = new HashMap<Integer, String>;
m.put(112334,"A");
m.put(221345,"B");
m.put(321411,"C");
m.put(431254,"D");

ペアが繰り返されないように、ハッシュマップから値のすべての組み合わせを取得したいと考えています。したがって、この場合、4 つの値 --> 6 つのペア (AB、AC、AD、BC、BD、CD)。私は次のようなことを考えています:

for(int i=0; i < (size-1); i++)
    for(int l = 1;  < size; l++)....

しかし、Java では Iterator を使用するので、Iterator を使用してそれを行うにはどうすればよいですか? (セットのインデックスを使用する方法を見つけることができれば、それも問題ありません)。

PS: 申し訳ありませんが、C++ から Java に移行したばかりなので、起動の助けが必要です。

4

2 に答える 2

1

値が を実装していることを確認してくださいComparable。String が実装されComparable<String>ているので問題ありません (必要に応じて Comparable に関するチュートリアルを読んでください)。

二重ループを実行してすべてのcompareToペア (x,y) を取得し、次のメソッドを使用して (x,x) と (y,x) を除外します。

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(112334,"A");
map.put(221345,"B");
map.put(321411,"C");
map.put(431254,"D");

Collection<String> values = map.values();
for (String str1 : values) {
    for (String str2 : values) {
        if (str1.compareTo(str2) < 0) {
            System.out.println(String.format("unique pair: (%s, %s)", str1, str2));
            // or whatever you want but do not modify map here!
        }
    }
}
于 2013-06-22T06:30:41.780 に答える
0

残りのアプローチを考えると、for質問に投稿した2つのループといくつかの修正を使用しても問題はありません。

for(int i=0; i < (size-1); i++)
    for(int l = i+1; l < size; l++)....

そうは言っても、Mapおそらく配列が本当に必要なものである場合に a を使用するのは私のアプローチではありません。

于 2013-06-22T06:29:52.910 に答える