优化java.util.Map和java.util.Set的实现?

Sea*_*wen 14 java collections performance map set

我正在编写一个应用程序,其中内存以及在较小程度上的速度至关重要.我从剖析中发现,我花了很多时间在Map和Set操作中.虽然我在考虑减少调用这些方法的方法,但我想知道是否有人在编写或遇到过显着改进访问时间或内存开销的实现?或者至少,在某些假设的情况下,这可以改善这些事情吗?

从JDK源代码来看,我无法相信它不能更快​​或更精简.

我知道Commons Collections,但我不相信它有任何实现,其目标是更快或更精简.Google Collections也是如此.

更新:应该注意到我不需要线程安全.

Egw*_*wor 11

通常这些方法非常快.您应该检查几件事情:您的哈希码是否已实施?它们是否足够均匀?否则你会得到垃圾表现.

http://trove4j.sourceforge.net/ < - 这有点快,节省了一些内存.我在50,000次更新时节省了几毫秒

您确定正确使用地图/套装吗?即不试图迭代所有的值或类似的东西.另外,例如,不要执行包含然后删除.只需检查删除.

还要检查你是否使用Double vs double.我注意到,在成千上万次检查中,性能有了几分之一的提升.

您是否也正确/适当地设置了初始容量?

  • 只是一个想法:你有没有想过让你的对象不可变,然后预先计算哈希码. (3认同)

Bri*_*new 7

你看过Trove4J吗?来自网站:

Trove旨在提供java.util.Collections API的快速轻量级实现.

基准在这里提供.


Esk*_*ola 6

除Google和Commons Collections外,以下是我所知道的:

当然,您始终可以实现自己的数据结构,这些结构针对您的用例进行了优化.为了能够更好地提供帮助,我们需要了解您访问模式以及您在集合中存储的数据类型.