Java HashMap, ConcurrentHashMap 等的 key 的类型对性能的影响?

比如 key 用 String 类型或者 Class 类型,哪个性能更好?

字符串长度多长冲突概率小而且性能又适中?

阅读 4.8k
2 个回答
新手上路,请多包涵

小于2的32-2

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;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题