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的.
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 实现
我建议你做你认为最清楚,最简单的事情.
尝试重用HashSet的问题是内部使用的大多数对象都不会被回收.如果你想要这个,请使用Javolution的FastSet http://javolution.org/target/site/apidocs/javolution/util/FastSet.html
HashSet不是最有效的集合集合,所以如果您真的关心这种级别的微优化,您可能会发现不同的集合更适合您的用例.然而,99%的时间它很好,是哈希集最明显的选择,我怀疑你如何使用它并不重要.
| 归档时间: |
|
| 查看次数: |
14778 次 |
| 最近记录: |