输入一段话,按照单词出现频率排序
看到要求时,自然想到了用Map<String,Integer>存单词和出现次数
要求排序自然想到了TreeMap,尝试写代码,才发现根本行不通,TreeMap只能按照键排序,不能按值排序
如果每个单词出现的频度不同,则可以先存进HashMap<String,Integer>再存进TreeMap<Integer,String>,就已经排好序了。
如果单词出现次数可以相同,先存进Map<String,Integer>和ArrayList<Map.Entry<String, Integer>>,再用Collections.sort()方法对ArrayList排序
public class CiPinTongJi {
public static void main(String[] args) {
String s="wo shi abc abc shi abc";
HashMap<String,Integer>map=new HashMap<String, Integer>();
String[]arr=s.split(" ");
for(String temp:arr){
if(map.containsKey(temp))
map.put(temp, map.get(temp)+1);
else
map.put(temp, 1);
}
ArrayList<Map.Entry<String, Integer>> list=new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(list,new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
Map.Entry<String, Integer> entiry1=(Map.Entry<String, Integer>)o1;
Map.Entry<String, Integer> entiry2=(Map.Entry<String, Integer>)o2;
return entiry1.getValue()-entiry2.getValue();
}
});
System.out.println(list);
}
}