Java HashSet性能

时间:2016-02-27 11:07:12

标签: java performance hashset

我理解基于HashSet的{​​{1}},因为它们非常相似。它使代码更加灵活,并最大限度地减少了实施工作量。但是,如果类禁止HashMap元素,则HashSet的Entry中的一个引用变量对我来说似乎是不必要的,因此整个条目没有任何意义。尽管如此,null需要24字节的内存/元素,而如果我的数字是正确的话,具有set的元素的单个数组将只需要4个字节/元素。 (除了数组的标题)

如果我的观点是正确的,那么这种表现的优势真的会超重吗?

(如果我错了,我会从中学习)

1 个答案:

答案 0 :(得分:1)

虽然这个问题主要是基于意见的,但我总结了一些关于这个主题的观点:

    许多年前,
  • HashSet出现在Java 1.2中。现在很难猜到当时设计决策的确切原因,但很明显Java并不适用于高负载应用程序;表演的作用不如简单。
  • 你是对的,HashSet的内存消耗不是最理想的。问题已知,错误JDK-6624565已注册,core-libs-dev的讨论会不时进行。但这对许多现实世界的应用程序来说是一个阻碍吗?可能,没有。
  • 对于那些HashSet内存使用率不可接受的不常见应用程序,已经有很好的替代方案,例如trove THashSet
  • 请注意,开放寻址算法有其缺点,例如:载荷因子接近1时性能显着下降;元素清除困难。请参阅related answer