java - 在Java中,存储大型列表的最有效内存方式是什么

标签 java performance list arraylist

我必须比较两个大的整数数组(大约 150,000 个值),看看哪些值是唯一的,哪些不是。我希望输出存储在三个数据结构中:UniqueTo_A、UniqueTo_B 和 SharedElements。我通常会使用 ArrayList 之类的东西来进行此类操作,因为可以临时添加值,但是我知道对于 ArrayList 来说,add() 和 remove() 的开销相当大。所以我的问题是:-在Java中,存储大型列表的最有效内存方式是什么,可以动态添加项目,性能是关键。所有帮助或评论将不胜感激。

编辑: 感谢您的参与。 TheLostMind,我需要添加到数据集,但哈希集将有助于这一点,所以我将继续使用哈希集。 Nafas + NeplatnyUdaj 感谢您提供示例。埃克尔斯,我应该掌握 Collection ,我会研究这个以供下次使用。后续实现....

最佳答案

使用Set,因为它在恒定时间内添加,它在恒定时间内删除多个值。我每天使用 set 来存储超过数百万个对象。和 removeAll 仍然以毫秒为单位

Set<Integer> setA= new HashSet<Integer>();
Set<Integer> setB= new HashSet<Integer>();

//add stuff to setA and setB by add() method

Set<Integer> uniqueToA=new HashSet<Integer>(setA);
Set<Integer> uniqueToB=new HashSet<Integer>(setB);
Set<Integer> shared=new HashSet<Integer>();
shared.addAll(setA);
shared.addAll(setB);

uniqueToA.removeAll(setB);
uniqueToB.removeAll(setA);

shared.removeAll(uniqueToA);
shared.removeAll(uniqueToB);

System.out.println(uniqueToA);  //unique to A
System.out.println(uniqueToB); //unique To B
System.out.println(shared);  //shared

关于java - 在Java中,存储大型列表的最有效内存方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764513/

相关文章:

通过二进制格式化程序进行列表序列化和反序列化

c# - 如何过滤和删除仅包含数字的列表中的索引?

java - 返回没有 parent 的实体?

java - byte[]转为图片下载

java - 线程池中要创建多少个线程

ruby - 以性能为中心的桌面程序 : Ruby or Go?

.net - .NET 内存管理在托管代码中是否比在 native 代码中更快?

java - 即使没有重复的单词,如何从字符串中删除所有重复的单词?

database - 用户信息和登录凭据的表设计?

list - 如何振荡列表中的数字?