Sop*_*ner 3 java integer hashmap hashset
在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);
...
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是简化的,想法是通过引用将集合传递给void方法并创建集合的完整副本,以便我们能够向副本添加一些新元素(这里是超集)并且不要触摸设置为我们在退出void方法时不需要它.
我的代码适用于大量数据处理,如果没有更快的方法来制作副本,那么我想优化HashSet自身,例如我不需要Integers作为键,但更好的原始ints.在一个int[]键中实现一系列键是个好主意MyHashSet吗?
如果可能,我会有兴趣使用相同的想法来改善这个:
Map<Integer, ArrayList<Item>> map = new HashMap<Integer, ArrayList<Item>>();
Run Code Online (Sandbox Code Playgroud)
编辑:我只需要速度性能优化.我不需要漂亮的可维护代码和内存.
您是否尝试过首先调整HashSet的初始容量和加载因子?
这是一篇可能对你有帮助的帖子.
如果要处理如此大量的数据,可能需要先分析它的分布并调整这些设置.
经过调整后,它可能会给使用整数替换Integers带来非常轻微的性能,但它可能更多地依赖于JVM实现细节和硬件配置,而不仅仅是这种改进所带来的.
你以后如何处理这些物体?如果您只是进行查找或类似的事情,将它们分开并检查两者可能会更快,而不是制作完整副本.所以,
public static void callVoidMethod(Set<Integer> set) {
Set<Integer> superset = new HashSet<Integer>();
...
if (conditionSatisfied) superset.add(someValue);
...
if(set.contains(value) || superset.contains(value))
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3458 次 |
| 最近记录: |