如何在HashMap <string,integer =“”>?</string,>中获取可能值的列表

时间:2012-09-26 03:10:40

标签: java sorting hashmap

  

可能重复:
  How do I iterate over each Entry in a Map?

我正在编写一个程序,它将采用输入(数据),这是一个字符串数组,并按照出现频率的顺序返回它们,然后按字母顺序返回它们在输入中具有相同数量的外观。我已经使用HashMap将每个字符串映射到它在数组中出现的次数,之后我的想法是使用for循环迭代每个数量的外观,但是我无法找到一个命令返回Hashmap中唯一值的数量。有谁知道如何获得这个价值?

此外,如果您有更简单的方法来执行我所描述的任务,欢迎任何建议。

    HashMap<String, Integer> sortmap = new HashMap<String, Integer>();
    ArrayList<String> stringlist = new ArrayList<String>();
    ArrayList<String> stringlist2 = new ArrayList<String>();
    for(String x : data)
    {
        if(sortmap.containsKey(x)){
            sortmap.put(x, sortmap.get(x)+1);
        }
        else{
            sortmap.put(x, 1);
        }
    }
    for (String s : sortmap.keySet()){
        for (int i : sortmap.values()){
            if (sortmap.get(s) == i){
                stringlist2.add(s);
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

最后的双循环是非常不幸的。

使用sortmap.entrySet()并将其存储在数组中。然后使用自己的Comparator对Arrays.sort进行排序,首先考虑计数器,如果它们相等,则按字母顺序比较字符串。

答案 1 :(得分:0)

我明白了 - 这里是那些想知道的人的完整逻辑:

public String[] sort(String[] data) {
    TreeMap<String, Integer> sortmap = new TreeMap<String, Integer>();
    ArrayList<String> stringlist = new ArrayList<String>();
    for(String x : data){
        if(sortmap.containsKey(x))
            sortmap.put(x, sortmap.get(x)+1);
        else
            sortmap.put(x, 1);
    }
    Arrays.sort(sortmap.values().toArray(), 0, sortmap.size());
    for (int i = data.length; i > 0; i--){
        for (Entry<String, Integer> k : sortmap.entrySet()){
            if (k.getValue() == i)
                stringlist.add(k.getKey());
        }
    }
    String[] output = stringlist.toArray(new String[stringlist.size()]);
    return output;
}