0
点赞
收藏
分享

微信扫一扫

我们能否使用任何类作为Map的key?

古得曼_63b6 2022-02-24 阅读 90

我们可以使用任何类作为 Map key ,然而在使用它们之前,需要考虑以下几点:

1 )如果类重写了 equals() 方法,它也应该重写 hashCode() 方法。

2 )类的所有实例需要遵循与 equals() hashCode() 相关的规则。请参考之前提到的这些规则。

3 )如果一个类没有使用 equals() ,你不应该在 hashCode() 中使用它。

4 )用户自定义 key 类的最佳实践是使之为不可变的,这样, hashCode() 值可以被缓存起来,拥有更好

的性能。不可变的类也可以确保 hashCode() equals() 在未来不会改变,这样就会解决与可变相关的问

题了。

比如,我有一个类 MyKey ,在 HashMap 中使用它。

// 传递给 MyKey name 参数被用于 equals() hashCode() MyKey key = new MyKey('Pankaj');

//assume hashCode=1234 myHashMap.put(key, 'Value'); // 以下的代码会改变 key hashCode()

equals() key.setName('Amit'); //assume new hashCode=7890 // 下面会返回 null ,因为 HashMap

尝试查找存储同样索引的 key ,而 key 已被改变了,匹配失败,返回 null myHashMap.get(new

MyKey('Pankaj')); 那就是为何 String Integer 被作为 HashMap key 大量使用。

举报

相关推荐

0 条评论