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