0

私はコードにあります

List<HashSet<Integer>> list = new ArrayList<HashSet<Integer>>(50);
pos = 17; // just some index less than 50
list.add(pos, new HashSet<Integer>());
list.get(17).add(99);
list.get(17).add(88);

しばらくして、{99、88}を含むHashSetを削除し、次のように新しいものを作成します。

// pos is still here
list.add(pos, new HashSet<Integer>());

許可されていますか?もっと速い解決策を知っていますか?ありがとう。

4

3 に答える 3

4

list.add(pos, new HashSet<Integer>());、その位置に新しいセットを追加し、既存のセットを にシフトpos+1ます。それはあなたが望むものではないようです。

セットを新しいものに置き換えたい場合は、次を使用しますset

list.set(pos, new HashSet<Integer>()); 

パフォーマンスの点でArrayList#setは、一定時間で実行されるため、リスト内の既存のセットを置き換える効率的な方法です。

于 2012-08-07T12:02:19.717 に答える
1

セットの内容を置き換えたい場合は、これを行うことができます

Set<Integer> set = list.get(pos);
set.clear();
set.add(99); set.add(98);

これは、セットを再利用するため、わずかに効率的です。

于 2012-08-07T12:19:14.747 に答える
0

guavaを使用する場合は、より簡潔に言うことができます。

List<Set<Integer>> list = Lists.newArrayListWithCapacity(50);
list.set(17, Sets.newHashSet(99, 88));    
于 2012-08-07T12:55:17.030 に答える