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