什么是更快的hashset清除或新的hashset?

osh*_*hai 2 java performance hashmap hashset

假设我已经定义了一个HashSet<String> set.
在性能方面有什么好处:

set.clear;
Run Code Online (Sandbox Code Playgroud)

要么

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

编辑:我检查这个的原因是,目前我的代码有第二个选项,但我想将其更改为第一个进行设置final.

Jos*_*Fox 12

尽管清晰度可能更高,但这取决于集合的大小.实际上,这不太可能对您的应用程序的性能产生重大影响.即使在围绕此函数的代码行中,性能也将受到JIT编译等其他因素的支配.

重要的是设计质量,这可以使您在分析代码轻松地重构性能.在大多数情况下,避免了难以跟踪状态的变化是重要的,创建一个新的HashSet比重用更好的设计HashSet的.


Jig*_*shi 6

HashSet清除调用map.clear()

这是

 /**
  621        * Removes all of the mappings from this map.
  622        * The map will be empty after this call returns.
  623        */
  624       public void clear() {
  625           modCount++;
  626           Entry[] tab = table;
  627           for (int i = 0; i < tab.length; i++)
  628               tab[i] = null;
  629           size = 0;
  630       }
Run Code Online (Sandbox Code Playgroud)

所以它肯定取决于 的大小Set。但答案是在您的应用程序环境中对其进行基准测试

注意:在本次演讲中参考 OpenJDK 实现


Pet*_*rey 5

我建议你做你认为最清楚,最简单的事情.

尝试重用HashSet的问题是内部使用的大多数对象都不会被回收.如果你想要这个,请使用Javolution的FastSet http://javolution.org/target/site/apidocs/javolution/util/FastSet.html

HashSet不是最有效的集合集合,所以如果您真的关心这种级别的微优化,您可能会发现不同的集合更适合您的用例.然而,99%的时间它很好,是哈希集最明显的选择,我怀疑你如何使用它并不重要.