当前位置:  开发笔记 > 编程语言 > 正文

选择具有预期数量的唯一值和插入的HashSet的初始容量

如何解决《选择具有预期数量的唯一值和插入的HashSet的初始容量》经验,为你挑选了2个好方法。

好的,这是我的情况:

我有一个状态数组,可能包含重复项.为了摆脱重复,我可以将它们全部添加到Set中.

但是,当我创建Set时,它需要定义初始容量和负载因子,但它们应该设置为什么?

从谷歌搜索,我想出了:

String[] allStates = getAllStates();
Set uniqueStates = new HashSet(allStates.length, 0.75);

这个问题是allStates可以包含1到5000个状态.因此,Set的容量将超过5000,但最多只能容纳50个.

因此,设置Set的最大大小可以设置为最大状态数,负载因子为1.

我想我的问题确实是:

当您不知道Set中有多少项时,您应该将初始容量设置为什么?

当它可以包含的最多是50时,它真正重要的是什么?

我应该担心吗?

Zarkonnen.. 15

假设你知道不会有超过50个州(你的意思是美国吗?),那么

Set uniqueStates = new HashSet(allStates.length, 0.75);

引用肯定是错的.我建议你的初始容量为50/0.75 = 67,或者可能是68以保证安全.

我也觉得有必要指出你可能会过度强调这一点.将arraylist从16提升到64再调整为64,除非在程序中性能最关键的部分正确,否则不会给你带来明显的性能提升.

所以最好的答案可能是使用:

new HashSet();

这样,一年之后你就不会回来了,并且为什么选择这样奇怪的构造函数参数而困惑.



1> Zarkonnen..:

假设你知道不会有超过50个州(你的意思是美国吗?),那么

Set uniqueStates = new HashSet(allStates.length, 0.75);

引用肯定是错的.我建议你的初始容量为50/0.75 = 67,或者可能是68以保证安全.

我也觉得有必要指出你可能会过度强调这一点.将arraylist从16提升到64再调整为64,除非在程序中性能最关键的部分正确,否则不会给你带来明显的性能提升.

所以最好的答案可能是使用:

new HashSet();

这样,一年之后你就不会回来了,并且为什么选择这样奇怪的构造函数参数而困惑.


+1为"一年后回来和拼图".总是发生在未记录的代码中

2> starblue..:

使用不需要指定这些值的构造函数,然后选择合理的默认值.


好吧,明智地避免性能问题,但不要微观优化.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有