現在のイテレータポイントだけでなく、別の要素も削除したい場合はどうすればよいですか?タスクは、いくつかの値を合計したペアを書き出すことです(HashSetセットに格納されます)。アイデア:セットを繰り返し、必要なものを合計した2番目の要素を見つけ出し、書き出し、両方から削除します。つまり、セットが[1,2,3]でint sum = 4の場合、反復して要素1:1を探し、4 - 1 = 3をチェックし、1,3を書き出し、次に{2}だけが残るように、セットから1と3を削除したいと思います。私はもちろんこれを行うことはできません:コレクションの繰り返し - 他の要素の削除
while (itr.hasNext()) {
int elem = itr.next();
int toSum = sum - elem;
if (set.contains(toSum)) {
System.out.println("(" + elem + "," + toSum + ")");
}
itr.remove();
set.remove(toSum);
}
同時の例外のためです。私はその解決策を見つけました:
while (itr.hasNext()) {
HashSet<Integer> notNeeded = new HashSet<Integer>();
int elem = itr.next();
if (notNeeded.contains(elem)) {
itr.remove();
}
else {
int toSum = sum - elem;
if (set.contains(toSum)) {
System.out.println("(" + elem + "," + toSum + ")");
notNeeded.add(toSum);
}
itr.remove();
}
}
しかし、それはエレガントで効率的(特にスペース効率的)に見えません。これを行うための良い方法はありますか?
あなたが整数を反復しているので、私はコレクションのコピーを作成し、元のを修正しながら... – jgitter
が理由だけで、ネストされたループを使用しないことを反復処理のでしょうか? – Natecat
ありがとうございました。しかし、私はあなたのアプローチが私のものと違っていることを認めていることを認めなければなりません。私は彼らがより充実しているかどうかは分かりません。 – Malvinka