计算Hashmap中的重复值

时间:2014-12-02 16:31:51

标签: java arraylist hashmap

我有一个如下所示的哈希映射:

HashMap<String, ArrayList<String>> varX = new HashMap<String, ArrayList<String>>();

我不能为我的生活弄清楚如何计算重复值的数量。 例如,如果put("001", "DM");进入哈希映射和put("010", "DM");,那么如果在Hashmap的ArrayList部分中有两个值,如何计算。

例如,输出看起来像这样:

DM:2因为我将'两个DM值放入Hashmap。

4 个答案:

答案 0 :(得分:2)

您有一个将String映射到ArrayList<String>的HashMap。

在此地图上执行put("001", "DM")将无效,正如 @Sotirios Delimanolis 的评论中所指出的那样。

您将收到如下错误:

The method put(String, ArrayList<String>) in the type HashMap<String,ArrayList<String>> is not applicable for the arguments (String, String)

根据您的示例行为,您需要HashMapString映射到String(即put("001", "DM");

现在,假设你有:

HashMap<String, String> varX = new HashMap<String, String>();

你想要计算映射到相同值的键数,这里有你如何做到这一点:

varX.put("001", "DM");
varX.put("010", "DM");

// ...

int counter = 0;
String countingFor = "DM";
for(String key : varX.keySet()) {            // iterate through all the keys in this HashMap
    if(varX.get(key).equals(countingFor)) {  // if a key maps to the string you need, increment the counter
        counter++;
    }
}
System.out.println(countingFor + ":" + counter);  // would print out "DM:2"

答案 1 :(得分:0)

正如Sotirios所说,你只能放一个ArrayList。

ArrayList<String> names= new ArrayList<String>();
names.add("Josh");
put("001", names);

如果要将字符串插入HashMap,请将其定义如下:

Map<String,String> example = new HashMap<String,String>();
example.put( "001", new String( "Rooney" ));

此致

答案 2 :(得分:0)

Collections.frequency(map, "value");用于计算集合中传递的对象。 以下是该方法的声明:

public static int frequency(Collection<?> c, Object o)

答案 3 :(得分:0)

HashMap hm =new HashMap();
hm.put("01","one");
hm.put("02","two");
hm.put("03","one");
hm.put("04","one");
hm.put("05","two");
HashMap newHm = new  HashMap();
         Iterator it = hm.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pair = (Map.Entry)it.next();
                System.out.println(pair.getKey() + " = " + pair.getValue());
                if(newHm.containsKey(pair.getValue())){
                    newHm.put(pair.getValue(), Integer.parseInt(newHm.get(pair.getValue()).toString())+1 );
                }else{
                    newHm.put(pair.getValue(),1 );
                }
                it.remove(); // avoids a ConcurrentModificationException
            }