【发布时间】:2014-10-14 16:14:38
【问题描述】:
我发现有一个Set 的实现使用散列(具有所有有用的结果,例如contains() 的O(1) 等),据称在各个方面都比java.util.HashSet 更有效:
http://ontopia.wordpress.com/2009/09/23/a-faster-and-more-compact-set/
http://alias-i.com/lingpipe/docs/api/com/aliasi/util/CompactHashSet.html
那么在我需要java.util.Set 的地方完全放弃使用java.util.HashSet 转而使用com.aliasi.util.CompactHashSet 是否是个好主意?
【问题讨论】:
-
当
HashSet运行良好时,为什么还要向您的项目添加另一个 JAR 依赖项?当然,除非您正在开发低延迟应用程序并且您知道您有性能或堆内存问题 -
您在使用 HashSet 时是否存在性能问题?如果是这样,做你自己的基准测试,看看它有什么好处。然后你可以决定是否需要切换。
-
@Mohammad:因为使用它的人少得多,所以它更容易包含可能尚未发现的错误。
-
有趣的是Guava also has a CompactHashSet,如果您确实想包含一个额外的 JAR,它提供更多的功能并将被 Java 社区更广泛地使用
-
另外,如果您阅读第二个链接,CompactHashSet 不 与 HashSet 兼容。除其他事项外,不能使用 null,并且您可能会在某些不会抛出 HashSet 的情况下获得 ClassCastExceptions。
标签: java performance collections big-o hashset