在Java中,我有以下代码:
上面的代码简化了,其思想是通过引用将set传递到void方法中,并创建一个完整的set副本,以便我们能够向副本中添加一些新元素(这里是超集),并在退出void方法时不改变原始set,因为我们需要它不变。
我的代码处理大量数据,如果没有更快的复制方式,则我想优化HashSet本身,例如我不需要将Integer用作键,而是更好的原始int。是否在MyHashSet中实现int[]数组键是一个好主意?
如果可能的话,我有兴趣使用相同的想法来改进这个:
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);
...
}
}
上面的代码简化了,其思想是通过引用将set传递到void方法中,并创建一个完整的set副本,以便我们能够向副本中添加一些新元素(这里是超集),并在退出void方法时不改变原始set,因为我们需要它不变。
我的代码处理大量数据,如果没有更快的复制方式,则我想优化HashSet本身,例如我不需要将Integer用作键,而是更好的原始int。是否在MyHashSet中实现int[]数组键是一个好主意?
如果可能的话,我有兴趣使用相同的想法来改进这个:
Map<Integer, ArrayList<Item>> map = new HashMap<Integer, ArrayList<Item>>();
编辑: 我只需要速度-性能-优化。我不需要美观可维护的代码和内存。
conditionSatisfied
一般是真还是假? - assyliasfor
循环中,有时为真,有时为假。 - Sophie SpernerArrayList
中并在退出循环时从集合中删除它们来避免这种情况。然而,执行时间是相同的。我的第二个问题是关于一些足够实现HashSet
的方法,我认为通过管理int
键它会更快。 - Sophie Sperner