最快的Java HashSet <Integer>库

Sop*_*ner 7 java performance hashset

除了这篇相当古老的帖子之外,我还需要一些能够使用原语并为包含大量HashSets的应用程序提供加速的东西Integers:

Set<Integer> set = new HashSet<Integer>();
Run Code Online (Sandbox Code Playgroud)

所以人们提到像Guava,Javalution,Trove这样的图书馆,但是在基准和性能结果方面没有完美的比较,或者至少是来自良好体验的良好答案.从我看到很多人推荐Trove的TIntHashSet,但其他人说它不是那么好; 有人说Guava是超级冷却和可管理的,但我不需要美观和可维护性,只需时间执行,所以Python的样式番石榴回家:) Javalution?我访问过该网站,对我来说似乎太老了,因此很古怪.

图书馆应提供最佳的可实现时间,内存无关紧要.

查看"Thinking in Java",可以创建HashMap使用int[]as键创建自定义.所以我希望看到类似的东西HashSet或只是下载并使用一个惊人的库.

EDIT(响应下面的评论)所以在我的项目中,我从大约50个HashSet<Integer>集合开始,然后我调用一个函数大约1000次,内部创建多达10个HashSet<Integer>集合.如果我更改初始参数,则数字可能会以指数方式增长.我只用add(),contains()以及clear()对这些集合的方法,这就是为什么他们选择.

现在我要找到一个实现HashSet或类似的库,但是由于自动装箱Integer开销会更快地完成,也许还有其他我不知道的东西.事实上,我正在使用整数,因为我的数据进入并存储在那些数据中HashSet.

Aca*_*lco 0

您在创建 HashSet 时是否尝试过使用初始容量和负载因子参数?

哈希集文档

正如您可能认为的那样,初始容量是指创建时空哈希集有多大,而负载因子是确定何时增长哈希表的阈值。通常,您希望将已用存储桶与总存储桶之间的比率保持在三分之二以下,这被认为是在哈希表中实现良好稳定性能的最佳比率。

哈希表的动态调整

因此,基本上,尝试设置适合您需求的初始容量(以避免在哈希表增长时重新创建和重新分配哈希表的值),以及调整负载因子,直到找到最佳点。

对于您的特定数据分布和设置/获取值,较低的负载因子可能会有所帮助(几乎不会有更高的负载因子,但您的里程可能会有所不同)。