我是Java新手,我正在使用Map类及其派生类。
我只是想知道如何在其中找到元素。只执行指针/引用检查?
假设我有TreeMap<MyObject, Integer>
。如果我有一个对象x
,我希望您搜索整数v
,使其键与x
“相等”,即使它们是类{{1}的2个独立实例因此有2个不同的指针。
是否有任何方法(接口/超类)可以执行此类操作?
提前致谢。
答案 0 :(得分:2)
涉及Map及其实现中的比较的所有方法都使用对象的'equals'方法。如果你试图将一个键+值添加到一个已经包含aentry的Map,并且该键与一个比较等于它的键,那么新的键+值将替换旧键。
例如,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
通过在树上上下指针为每个节点提供更多信息,但查找仍然通过哈希进行(我相信)