![](/img/trans.png)
[英]In Java, what's the difference between HashSet<Integer> = new HashSet(2) and HashSet<Integer> = new HashSet<Integer>(2)?
[英]Fastest Java HashSet<Integer> library
除了这篇相当老的文章之外 ,我还需要一些将使用原语并为包含很多HashSet
的Integers
的应用程序加速的方法:
Set<Integer> set = new HashSet<Integer>();
因此,人们提到了诸如Guava,Javalution,Trove之类的库,但是就基准和性能结果而言,它们之间没有完美的比较,或者至少从良好的经验中获得了良好的答案。 从我看来,很多人都推荐Trove的TIntHashSet
,但是其他人则说那不是那么好。 有人说Guava是超酷且易于管理的,但我不需要美观和可维护性,只需要时间执行即可,因此Python风格的Guava可以归位了:) Javalution? 我访问过该网站,对于我来说似乎太老了,因此古怪。
该库应提供最佳可实现时间,内存无所谓。
看“用Java思考”,有一个想法是使用int[]
作为键来创建自定义HashMap
。 因此,我希望看到与HashSet
类似的东西,或者只是下载并使用一个令人惊叹的库。
编辑 (响应下面的评论),所以在我的项目,我从50开始HashSet<Integer>
集合,那么我所说的约1000倍函数内创建多达10个HashSet<Integer>
集合。 如果更改初始参数,数字可能会成倍增长。 我只在这些集合上使用add()
, contains()
和clear()
方法,这就是为什么选择它们的原因。
现在,我将找到一个实现HashSet
或类似功能的库,但是由于自动装箱Integer
开销以及其他我不知道的东西,它会更快地实现。 实际上,我在输入数据时使用的是整数,并将它们存储在这些HashSet
。
Trove是一个很好的选择。
它比通用集合快得多的原因是内存使用。
java.util.HashSet<Integer>
在内部使用java.util.HashMap<Integer, Integer>
。 在HashMap
,每个对象都包含在Entry<Integer, Integer>
。 这些对象估计需要24个字节的Entry
+ 16个字节的实际整数+ 4个字节的实际哈希表。 与Trove中的4个字节相比,这产生了44个字节,这是多达11倍的内存开销(请注意,主表中未占用的整体将在实践上产生较小的差异)。
另请参阅以下实验:
http://www.takipiblog.com/2014/01/23/java-scala-guava-and-trove-collections-how-much-can-they-hold/
看一下Java的高性能基元集合(HPPC) 。 它是替代,成熟和精心设计以提高效率的替代方法。 有关IntOpenHashSet的信息,请参见JavaDoc。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.