好的,这是我的情况:
我有一个状态数组,可能包含重复项.为了摆脱重复,我可以将它们全部添加到Set中.
但是,当我创建Set时,它需要定义初始容量和负载因子,但它们应该设置为什么?
从谷歌搜索,我想出了:
String[] allStates = getAllStates(); SetuniqueStates = new HashSet (allStates.length, 0.75);
这个问题是allStates可以包含1到5000个状态.因此,Set的容量将超过5000,但最多只能容纳50个.
因此,设置Set的最大大小可以设置为最大状态数,负载因子为1.
我想我的问题确实是:
当您不知道Set中有多少项时,您应该将初始容量设置为什么?
当它可以包含的最多是50时,它真正重要的是什么?
我应该担心吗?
Zarkonnen.. 15
假设你知道不会有超过50个州(你的意思是美国吗?),那么
SetuniqueStates = new HashSet (allStates.length, 0.75);
引用肯定是错的.我建议你的初始容量为50/0.75 = 67,或者可能是68以保证安全.
我也觉得有必要指出你可能会过度强调这一点.将arraylist从16提升到64再调整为64,除非在程序中性能最关键的部分正确,否则不会给你带来明显的性能提升.
所以最好的答案可能是使用:
new HashSet();
这样,一年之后你就不会回来了,并且为什么选择这样奇怪的构造函数参数而困惑.
假设你知道不会有超过50个州(你的意思是美国吗?),那么
SetuniqueStates = new HashSet (allStates.length, 0.75);
引用肯定是错的.我建议你的初始容量为50/0.75 = 67,或者可能是68以保证安全.
我也觉得有必要指出你可能会过度强调这一点.将arraylist从16提升到64再调整为64,除非在程序中性能最关键的部分正确,否则不会给你带来明显的性能提升.
所以最好的答案可能是使用:
new HashSet();
这样,一年之后你就不会回来了,并且为什么选择这样奇怪的构造函数参数而困惑.
使用不需要指定这些值的构造函数,然后选择合理的默认值.