0

可能重复:
如何遍历地图中的每个条目?

我正在编写一个程序,它将接受一个输入(数据),它是一个字符串数组,并按出现频率的顺序返回它们,如果它们在输入中出现的次数相同,则按字母顺序返回。我使用 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);
            }
        }
    }
4

2 回答 2

1

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

获取 sortmap.entrySet() 并将其存储在一个数组中。然后使用您自己的 Comparator 使用您自己的 Comparator 对该数组进行排序,如果它们相等,则按字母顺序比较字符串。

于 2012-09-26T04:12:48.287 回答
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;
}
于 2012-09-26T04:04:35.573 回答