比如 key 用 String 类型或者 Class 类型,哪个性能更好?
字符串长度多长冲突概率小而且性能又适中?
比如 key 用 String 类型或者 Class 类型,哪个性能更好?
字符串长度多长冲突概率小而且性能又适中?
键key
的主要作用是调用hashCode
方法以计算位于数组的位置,基于性能和安全考虑,最好用不可变简单对象
因为复杂对象正常的写法都是基于每个属性分别调用hashCode
然后再复杂累加(可能导致性能问题),而对象不可变保证了 PUT
操作的key值GET
的时候能得到一致的hash,也就保证了能GET
到值,对象变了可能会导致GET
不到(hash变了,table数组的位置可能发生变化)
至于字符串长度,一般还是以满足业务需求为止就行了,比如涉及一个Map<String,User>
,key是用户的账号,你说你研究什么长度。。
String,Long,Intege
等作为Map的key附简单的hashCode写法
public class Test {
private String name;
private String address;
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (address != null ? address.hashCode() : 0);
return result;
}
}
15 回答8.2k 阅读
8 回答5.9k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
小于2的32-2