问题很简单,就是标题:
我们可以使用Object类的实例作为HashMap中的键吗?
我不是在谈论使用任何自定义类作为键,而是在使用Object
类实例作为键。
如果我们可以使用它,是否需要采取任何预防措施?
答案 0 :(得分:3)
是的,您可以将Object的实例用作地图的键:
Map<Object, SomeOtherType> myMap = new HashMap<>();
但这可能是一件危险的事情,因为这意味着 any 类型的对象可以用作键对象,包括不可变的对象,以及是否使用了键对象那是一个其.equals(...)
或.hashCode()
以后可以更改的对象,可能会因映射破裂而产生一些不良影响。对于任何映射,其中的键可能是可变的。
根据Map API:
注意:如果将可变对象用作地图键,则必须格外小心。如果在对象是映射中的键的情况下以影响等值比较的方式更改对象的值,则不会指定映射的行为。
总而言之:是的,这是可能的,但是不要这样做