String[] stringArray = {"x", "y", "z", "x", "x", "y", "a"};
final Map<String, Integer> counter = new HashMap<String, Integer>();
for (String str : stringArray)
counter.put(str, 1 + (counter.containsKey(str) ? counter.get(str) : 0));
List<String> list = new ArrayList<String>(counter.keySet());
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String x, String y) {
return counter.get(y) - counter.get(x);
}
});
for (String string : list) {
System.out.println(string)
}
按照每个String的出现频率的顺序,将其排序为较小的Collection的最快/最有效的方法是什么?
我尝试使用HashMap,但是可以,但是我希望它显示["x", "y", "z", "a"]
,而显示["x", "y", "a", "z"]
。我只希望列表不按字母顺序按频率排序。
谢谢,我已经附加了代码以显示自己的工作。
答案 0 :(得分:0)
用以下内容替换compare()
方法主体:
if (!counter.get(y).equals(counter.get(x)))
return counter.get(y) - counter.get(x);
return x.compareTo(y);