我有一个HashMap,需要根据其整数值获取项目。我注意到有一个containsValue()函数,但似乎我仍然必须遍历映射以找到正确的索引。
我的问题是:如果之后仍需要遍历它,为什么要使用containsValue()函数?
此外,我是否完全误解了这个问题?;-)
我的问题是:如果之后仍需要遍历它,为什么要使用containsValue()函数?
此外,我是否完全误解了这个问题?;-)
一个映射将一个键映射到一个值。如果您有一个值并且知道该映射包含这个值,为什么还需要键呢?
另一方面,如果您确实需要键或者只有值的一个属性,您可以迭代 entrySet()
,检查值并在找到时返回键:
for (Map.Entry<Index,Value> entry : map.entrySet()) {
if (entry.getValue().getXy().equals(xy)) {
return entry.getKey();
}
}
HashMap(或一般的Map)使用键值对。当您向地图中添加内容时,必须指定一个键,而在检索值时将再次使用该键。基于HashMap的实现,给定一个键,检索值的时间复杂度为O(1)。
containsValue是用于检查HashMap是否包含您要查找的值的有用方法,但我真的不明白为什么要使用它来检索您要查找的值?
使用地图的正确方式应该是:
HashMap<Integer, Object> myMap = new HashMap<Integer, Object>();
myMap.put(1, object1);
myMap.put(2, object2);
myMap.put(3, object3);
Object myObject = myMap.get(1);
myMap.containsKey(1);
如果您只是想知道它是否存在,但调用没有问题:
Object myObject = myMap.get(99);
如果没有键值,它只会返回null,99。
所以基本上,重点是,你是正确的,在尝试检索值时使用containsValue是没有意义的。如果要先检查存在性,请使用get或containsKey。
您不需要在此之后进行遍历。containsValue()
在您不需要精确知道值所在位置,而只需要知道它是否已经存在于Map中的情况下非常有用。如果您需要精确知道值在Map中的位置,请不要使用containsValue()
-- 直接跳到迭代器并找到它。
在不需要遍历整个哈希表的情况下,您可以使用containsValue()方法。例如,如果您想向哈希表中添加键值对,但在此之前想知道该值是否已经在哈希表中存在,则可以使用该方法。在这种情况下,对于添加操作,您不需要遍历整个哈希表。