0

重複
の可能性: ハッシュマップを検索またはソートする必要があるかどうかわからない

こんにちは、年齢のリストがあります。30 歳以上の人を見つける必要があります。ハッシュマップで検索する可能性はありますか? (他の年齢層のものも探す必要があるかもしれないので、コードを簡単にするために 2 つの異なるリストを使用しないことをお勧めします)

つまり、私の目標は、HashMap で特定の値を持つ要素を検索する方法を見つけることです。

サンプルリストは

element1 40
element2 4
element3 66
element4 5

値が 40 を超えるものと、値が 66 以上のものを見つけたいと考えています。

すべての値を反復処理する以外に方法はありますか?

4

3 に答える 3

2

AHashMapはキーによる検索のみを提供するため、コレクション全体を反復処理し、不要な要素をフィルタリングする必要があります。

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) { ... }
}

代替手段はNavigableMap、値からそれらに関連する要素にマップして使用する a を保持することNavigableMap.subMap()です (重複する値がある場合、の値は a であるNavigableMap必要があることに注意してくださいList)

于 2012-10-03T12:42:43.747 に答える
1

グアバを使用すると、次のことができます

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));
    }

必要な年齢が変わる可能性があるため、フィルタリングに使用される 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;
    }
}

次のようにフィルターで使用します

Map<String, Integer> filteredMap = Maps.filterValues(map,new AgePredicate(66));
于 2012-10-03T12:55:26.100 に答える
0

次のようにキー値を反復処理できます。

   Iterator<String> it = hm.keySet().iterator();
    while (it.hasNext()){
        String key = it.next();
        if (hm.get(key) >= 40) {
            // do some stuff...
        }
    }
于 2012-10-03T12:44:18.720 に答える