我正在编写一个程序,它将采用输入(数据),这是一个字符串数组,并按照出现频率的顺序返回它们,然后按字母顺序返回它们在输入中具有相同数量的外观。我已经使用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);
}
}
}
答案 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;
}