0

そのため、HashMap を受け取り、HashMap に同じキーがいくつあるかをカウントするメソッドを作成しようとしました。これがコードです。かなり自明です。

import java.util.HashMap;
import java.util.Map;

public class ExtendedHashMap extends HashMap<String, Integer> {

public ExtendedHashMap() {
    super();
}

public int keyCount(String keyString) {
    String key = keyString;
    int keyCountInt = 0;
    for(Map.Entry<String, Integer> entry : this.entrySet()) {
        if(entry.getKey() == keyString) {
            keyCountInt++;
        }
    }
    return keyCountInt;
}

public static void main(String[] args) {
    ExtendedHashMap ex = new ExtendedHashMap();
    ex.put("Item One", 5);
    ex.put("Item Three", 25);
    ex.put("Item Four", 35);
    ex.put("Item Two", 15);
    ex.put("Item One", 5);
    ex.put("Item Two", 15);
    ex.put("Item Three", 25);
    ex.put("Item Four", 35);
    System.out.println(ex.keyCount("Item One"));
}
}

これを実行すると、何があっても出力されることがわかります。お気付きのように、キーには値が 1 つしかないため、それは除外されます。想定どおりに出力する値を取得するにはどうすればよいですか?

4

4 に答える 4

2

HashMap では重複キーは許可されていません。したがって、答えが1 つしか得られないことは明らかです。

記録のために、同じキーで2つの異なる値を追加しても、例外は発生しません。元の値は静かに新しい値に置き換えられます。やってみる

 ex.get("Item One");

Multimapで同じ操作を実行したい場合があります。

于 2013-09-06T11:44:00.200 に答える
1

HashMap に同じキーがいくつあるかをカウントします。

キーはすべてのマップで一意です。キーがマップにある場合、カウントは常に 1 になります。最初にMAP の API を調べます。

マップに重複キーを含めることはできません。各キーは、最大で 1 つの値にマップできます。

また、Map.html#entrySet()java.util.Setは、重複する要素を含むことができないクラスを返します。

于 2013-09-06T11:43:34.133 に答える
1

HashMapキーと値のペアのデータ構造です。そしてkeyユニークです。だから答えは一つです。

于 2013-09-06T11:45:33.310 に答える
1

コレクションを拡張するのではなく、ラップすることを強くお勧めします。

これは

public int keyCount(String keyString) {
    return containsKey(keyString) ? 1 : 0;
}

おそらく、MultiMapを念頭に置いていましたか?

public int keyCount(String keyString) {
    Collection coll = multiMap.get(keyString)
    return coll == null ? 0 : coll.size();

}

ただし、 MultiSet はあなたが本当に望んでいるものだと思います

import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;

public class Inventory {
    private final Multiset<String> countingSet = ConcurrentHashMultiset.create();

    public void add(String key, int count) {
        countingSet.add(key, count);
    }

    public int keyCount(String keyString) {
        return countingSet.count(keyString);
    }

    public static void main(String[] args) {
        Inventory ex = new Inventory();
        ex.add("Item One", 5);
        ex.add("Item Three", 25);
        ex.add("Item Four", 35);
        ex.add("Item Two", 15);
        ex.add("Item One", 5);
        ex.add("Item Two", 15);
        ex.add("Item Three", 25);
        ex.add("Item Four", 35);
        System.out.println(ex.keyCount("Wooden Sword"));
        System.out.println(ex.keyCount("Item Three"));
    }
}

版画

0
50
于 2013-09-06T11:47:15.843 に答える