Raj*_*pta 7 java collections hashtable hashmap hashset
当我真正知道HashSet中最大可能的元素数时,我应该使用什么负载因子?我听说建议使用0.75的默认负载系数,因为它在速度和空间之间提供了良好的性能折衷.它是否正确 ?但是,更大的HashSet也会在创建和更多空间上花费更多时间.
我正在使用HashSet,以便从整数列表中删除重复的整数.
我花了一些时间来研究一下载荷因子,并且令人震惊的是,这种设置在实践中确实有多么不同.即使将其设置为像2.0这样的高点也不会减慢速度,也不会节省大量内存.只是假装它不存在.Josh经常后悔曾将它作为一种选择暴露出来.
如果您确切知道应该有多少个,则应该将负载因子设置为 1 并确保哈希函数映射为 1:1。您可能希望扩展您的容器以不重新散列您的哈希值。
请注意,这种“精确”的东西往往会随着时间的推移而改变,所以你最好只使用普通的容器。:)
编辑:我的答案是在我知道它是整数之前。
是的,你最好的选择就是保持原样离开。你永远不会注意到其中的差异。
/**
* Remove duplicates from a list.
* @note This will ALTER the list.
* @note This is not thread safe.
* @param the list (potentially with duplicates)
*/
void removeDuplicates(List<Integer> list) {
Set<Integer> noDupe = new HashSet<Integer>(list.size()); // will end up resizing once, oh well
for(Integer i : list) noDupe.add(i);
list.clear();
list.addAll(noDupe);
}
Run Code Online (Sandbox Code Playgroud)