Java 如何在HashMap中查找元素

Java 如何在HashMap中查找元素,java,search,hashmap,Java,Search,Hashmap,可能重复: 嗨,我有一张有年龄的人的名单,我需要找到那些超过30岁的人, 有没有可能在hashmap中搜索?(请注意,我可能还需要寻找其他年龄段的人,因此为了代码简单起见,我不希望使用两个不同的列表) 简而言之:我的目标是找到一种在HashMap中搜索具有特定值的元素的方法 样本列表为 element1 40 element2 4 element3 66 element4 5 我想找到那些值大于40的和那些值大于或等于66的 除了遍历所有值,还有其他方法吗?AHashMap仅提供按键搜索,因

可能重复:

嗨,我有一张有年龄的人的名单,我需要找到那些超过30岁的人, 有没有可能在hashmap中搜索?(请注意,我可能还需要寻找其他年龄段的人,因此为了代码简单起见,我不希望使用两个不同的列表)

简而言之:我的目标是找到一种在HashMap中搜索具有特定值的元素的方法

样本列表为

element1 40
element2 4
element3 66
element4 5
我想找到那些值大于40的和那些值大于或等于66的


除了遍历所有值,还有其他方法吗?

A
HashMap
仅提供按键搜索,因此您必须遍历整个集合并过滤不需要的元素

您可以使用for each循环执行此操作:

for (Entry<MyKey,MyValue> e : map.entrySet()) { 
    if (e.getValue() >= 40) { ....} //e.getKey() is an element with the needed value
    if (e.getValue() >= 66) { ... }
}
for(条目e:map.entrySet()){
如果(e.getValue()>=40){..}//e.getKey()是具有所需值的元素
如果(e.getValue()>=66){…}
}

另一种方法是持有一个从值映射到与其相关的元素并使用(注意,如果您可能有重复值,
NavigableMap
的值应该是一个
列表

a
HashMap
仅提供按键搜索,因此,您必须迭代整个集合并过滤不需要的元素

您可以使用for each循环执行此操作:

for (Entry<MyKey,MyValue> e : map.entrySet()) { 
    if (e.getValue() >= 40) { ....} //e.getKey() is an element with the needed value
    if (e.getValue() >= 66) { ... }
}
for(条目e:map.entrySet()){
如果(e.getValue()>=40){..}//e.getKey()是具有所需值的元素
如果(e.getValue()>=66){…}
}

另一种选择是持有一个从值映射到与其相关的元素并使用(注意,如果您可能有重复值,
NavigableMap
的值应该是一个
列表

您可以像这样迭代键值:

   Iterator<String> it = hm.keySet().iterator();
    while (it.hasNext()){
        String key = it.next();
        if (hm.get(key) >= 40) {
            // do some stuff...
        }
    }
Iterator it=hm.keySet().Iterator();
while(it.hasNext()){
String key=it.next();
如果(hm.get(键)>=40){
//做些事情。。。
}
}

您可以像这样迭代键值:

   Iterator<String> it = hm.keySet().iterator();
    while (it.hasNext()){
        String key = it.next();
        if (hm.get(key) >= 40) {
            // do some stuff...
        }
    }
Iterator it=hm.keySet().Iterator();
while(it.hasNext()){
String key=it.next();
如果(hm.get(键)>=40){
//做些事情。。。
}
}

用番石榴,你可以做以下几点

import com.google.common.base.Predicate;
import com.google.common.collect.Maps;

public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("element1", 40);
        map.put("element2", 4);
        map.put("element3", 66);
        map.put("element4", 5);
        Map<String, Integer> filteredMap = Maps.filterValues(map,
                Predicates.equalTo(66));
    }
import com.google.common.base.Predicate;
导入com.google.common.collect.Maps;
公共静态void main(字符串[]args){
Map Map=newhashmap();
地图放置(“元素1”,40);
地图放置(“元素2”,4);
地图放置(“元素3”,66);
地图放置(“元素4”,5);
Map filteredMap=Maps.filterValues(Map,
谓语:equalTo(66));
}
由于您所需的年龄可能会更改,因此您可以使用一个用于筛选的AgePredicate

class AgePredicate implements Predicate<Integer> {
    int minAge;

    public AgePredicate(int minAge) {
        super();
        this.minAge = minAge;
    }

    @Override
    public boolean apply(Integer age) {
        return age > minAge;
    }
}
类AgePredicate实现谓词{
内特米纳奇;
公共年龄谓词(int minAge){
超级();
this.minAge=minAge;
}
@凌驾
公共布尔应用(整数年龄){
回归年龄>minAge;
}
}
并在过滤器中使用它,如下所示

Map<String, Integer> filteredMap = Maps.filterValues(map,new AgePredicate(66));
Map filteredMap=Maps.filterValues(Map,newagepredicate(66));

用番石榴,你可以做以下几点

import com.google.common.base.Predicate;
import com.google.common.collect.Maps;

public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("element1", 40);
        map.put("element2", 4);
        map.put("element3", 66);
        map.put("element4", 5);
        Map<String, Integer> filteredMap = Maps.filterValues(map,
                Predicates.equalTo(66));
    }
import com.google.common.base.Predicate;
导入com.google.common.collect.Maps;
公共静态void main(字符串[]args){
Map Map=newhashmap();
地图放置(“元素1”,40);
地图放置(“元素2”,4);
地图放置(“元素3”,66);
地图放置(“元素4”,5);
Map filteredMap=Maps.filterValues(Map,
谓语:equalTo(66));
}
由于您所需的年龄可能会更改,因此您可以使用一个用于筛选的AgePredicate

class AgePredicate implements Predicate<Integer> {
    int minAge;

    public AgePredicate(int minAge) {
        super();
        this.minAge = minAge;
    }

    @Override
    public boolean apply(Integer age) {
        return age > minAge;
    }
}
类AgePredicate实现谓词{
内特米纳奇;
公共年龄谓词(int minAge){
超级();
this.minAge=minAge;
}
@凌驾
公共布尔应用(整数年龄){
回归年龄>minAge;
}
}
并在过滤器中使用它,如下所示

Map<String, Integer> filteredMap = Maps.filterValues(map,new AgePredicate(66));
Map filteredMap=Maps.filterValues(Map,newagepredicate(66));

Google Guava有一个关于NavigableMultiMap的未决问题:(Google Guava有一个关于NavigableMultiMap的未决问题:(