我有代码
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并创建一个新的HashSet,如下所示:
// pos is still here
list.add(pos, new HashSet<Integer>());
允许吗?你知道更快的解决方案吗?感谢。
答案 0 :(得分:4)
list.add(pos, new HashSet<Integer>());
将add a new set at that position and shift the existing one转到pos+1
。这似乎不是你想要的。
如果您想要更换新套装,请使用set
:
list.set(pos, new HashSet<Integer>());
在性能方面,ArrayList#set
在固定时间内运行,因此它是替换列表中现有集合的有效方法。
答案 1 :(得分:1)
如果要替换集合的内容,可以执行此操作
Set<Integer> set = list.get(pos);
set.clear();
set.add(99); set.add(98);
重用该集合会稍微提高效率。
答案 2 :(得分:0)
如果您使用番石榴,您可以更简洁地说:
List<Set<Integer>> list = Lists.newArrayListWithCapacity(50);
list.set(17, Sets.newHashSet(99, 88));