关于Java:如何获取哈希表和字符串中的可能值列表,整型?

How do I get the list of possible values in a HashMap<String, Integer>?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I iterate over each Entry in a Map?

我正在编写一个程序,它将接受一个输入(数据),这是一个字符串数组,并按出现频率的顺序返回它们,然后按字母顺序返回,如果它们在输入中出现的次数相同。我使用了一个hashmap将每个字符串映射到它在数组中出现的次数,然后我的想法是使用for循环迭代每个出现次数,但是我找不到一个命令来返回hashmap中唯一值的数量。有人知道如何得到这个值吗?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    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);
            }
        }
    }


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

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


我明白了-这是所有想知道的人的逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}