在java地图中搜索对象

时间:2011-11-29 20:35:36

标签: java map polymorphism treemap

我是Java新手,我正在使用Map类及其派生类。

我只是想知道如何在其中找到元素。只执行指针/引用检查?

假设我有TreeMap<MyObject, Integer>。如果我有一个对象x,我希望您搜索整数v,使其键与x“相等”,即使它们是类{{1}的2个独立实例因此有2个不同的指针。

是否有任何方法(接口/超类)可以执行此类操作?

提前致谢。

3 个答案:

答案 0 :(得分:2)

涉及Map及其实现中的比较的所有方法都使用对象的'equals'方法。如果你试图将一个键+值添加到一个已经包含aentry的Map,并且该键与一个比较等于它的键,那么新的键+值将替换旧键。

请参阅the documentation

  

例如,containsKey(Object key)方法的规范说:“当且仅当此映射包含键k的映射时才返回true(key == null?k == null:key.equals (k))的“。

如果实现可以通过某些其他方式(例如比较哈希码)确定密钥是“不相等”,则实现可能不会执行任何等于比较。

答案 1 :(得分:1)

在你的例子中,你会做

 TreeMap<MyObject, Integer> tree = ...
 Integer i = tree.get(x);

get(x)会迭代keys()并返回匹配aKey.equals(x)的密钥的整数值。

答案 2 :(得分:-2)

在大多数情况下,Map由哈希表支持,与HashMap非常相似。 TreeMap通过在树上上下指针为每个节点提供更多信息,但查找仍然通过哈希进行(我相信)