Javaでは、次のようになります。
Set<Integer> set = new HashSet<Integer>();
callVoidMethod(set);
...
public static void callVoidMethod(Set<Integer> set) {
Set<Integer> superset = new HashSet<Integer>(set);
...
// I just added this loop to show that I'm adding quite a lot
// well, it depends on conditions, sometimes I add nothing,
// but it is unpredictable and do not know if add something
for (int i = 0; i < 1000; i++) {
...
if (conditionSatisfied) superset.add(someValue);
...
}
}
上記のコードは単純化されています。アイデアは、参照によってセットをvoidメソッドに渡し、セットの完全なコピーを作成して、コピーにいくつかの新しい要素を追加できるようにすることです(ここではスーパーセット)。 voidメソッドを終了するときに、必要に応じて設定します。
私のコードは多くのデータ処理で動作します。コピーを作成するためのより高速な方法がない場合は、HashSet
それ自体を最適化したいと思います。たとえばInteger
、キーとしてのsは必要ありませんが、より優れたプリミティブint
です。int[]
キーの配列をMyHashSet
?に実装することをお勧めします。
可能であれば、これを改善するために同じアイデアを使用することに興味があります。
Map<Integer, ArrayList<Item>> map = new HashMap<Integer, ArrayList<Item>>();
編集:私は速度-パフォーマンス-最適化だけが必要です。美しく維持可能なコードとメモリは必要ありません。