为什么String, Interger这样的wrapper类适合作为键?
1,String已经重写了equals()和hashCode()方法了,其他的wrapper类也有这个特点
2,String是不可变的,也是final的,不可变性是必要的,因为为了要计算hashCode(),就要防止键值改变,如果键值在放入时和获取时返回不同的hashcode的话,那么就不能从HashMap中找到你想要的对象
3,不可变性还有其他的优点如线程安全。如果你可以仅仅通过将某个field声明成final就能保证hashCode是不变的,那么请这么做吧。因为获取对象的时候要用到equals()和hashCode()方法,那么键对象正确的重写这两个方法是非常重要的。如果两个不相等的对象返回不同的hashcode的话,那么碰撞的几率就会小些,这样就能提高HashMap的性能。
原文:https://www.cnblogs.com/xueyunqing/p/10839243.html