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 回答