java - 最快的 Java HashSet<Integer> 库

标签 java performance hashset

<分区>

除了this quite old post ,我需要一些可以使用原语并为包含大量 HashSet 的应用程序提供加速的东西的 Integers :

Set<Integer> set = new HashSet<Integer>();

所以人们提到像 Guava、Javalution、Trove 这样的库,但在基准测试和性能结果方面并没有对它们进行完美的比较,或者至少没有来自好的经验的好的答案。据我所知,许多人推荐 Trove 的 TIntHashSet ,但其他人说它不是那么好;有人说 Guava super 酷且易于管理,但我不需要美观和可维护性,只需要时间执行,所以 Python 的风格 Guava 回家了:) Javalution?我访问过该网站,对我来说太老了,因此很古怪。

库应该提供最好的时间,内存无关紧要。

看《Thinking in Java》,有创建自定义的想法HashMapint[]作为 key 。所以我想看到与 HashSet 类似的东西或者只是下载并使用一个很棒的库。

编辑(回应以下评论) 所以在我的项目中,我从大约 50 HashSet<Integer> 开始集合,然后我调用一个函数大约 1000 次,该函数内部最多创建 10 个 HashSet<Integer> Collection 品。如果我更改初始参数,数字可能会呈指数增长。我只用 add() , contains()clear()这些集合的方法,这就是选择它们的原因。

现在我要找一个实现了HashSet的库或类似的东西,但由于自动装箱 Integer 会更快开销,也许还有其他我不知道的东西。事实上,我在输入数据时使用整数并将它们存储在 HashSet

最佳答案

Trove 是一个很好的选择。

它比通用集合快得多的原因是内存使用。

A java.util.HashSet<Integer>使用 java.util.HashMap<Integer, Integer>在内部。在 HashMap , 每个对象都包含在 Entry<Integer, Integer> 中.这些对象估计为 Entry 占用 24 个字节。 + 实际整数的 16 个字节 + 实际哈希表中的 4 个字节。这产生了 44 个字节,而不是 Trove 中的 4 个字节,内存开销高达 11 倍(请注意,主表中未占用的整体将在实践中产生较小的差异)。

另见这些实验:

http://www.takipiblog.com/2014/01/23/java-scala-guava-and-trove-collections-how-much-can-they-hold/

关于java - 最快的 Java HashSet<Integer> 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836546/

相关文章:

PHP MySQL : Select from same table multiple times without database load for each query?

sql-server - union 与 union all 的表现

java - 为什么HashMap的N个条目和HashSet的N个条目在堆中占用相同的空间?

java - 在 Java Blackjack Simulator 中处理分割 - 递归?

java - 如何将文件从远程服务器的目录A移动到目录B?

java - RemoteWebDriver 和 WebElement 的通用接口(interface)

java - 限定方法调用是否会降低 Java 中的性能?

java - 如何制作创建好的类(class)打印件?

java - 选择正确的数据结构

c# - 有没有办法在 C# 中获取两组对象之间的差异