HashMap 不可以排序,当记录的数据通过HashMap,却想要排序,只有将map.entrySet转换为List,通过使用List中collections.sort()方法进行排序,可对key值,value值,或者其他自定义之进行排序。
需要记录字符串中不同字符的个数,使用HashMap,通过遍历将字符串所有字符记录到HashMap里,然后map.entrySet转换为List;进而去调用Collections.srot();进行排序
public class Eg{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);//通过后台输入,创建Scanner
String str = scanner.nextLine();//在控制台的到字符串
char[] c =str.toCharArray();//字符串转换为Char数组
//创建HashMap key值是Character(字符),value值是Integer(原始数据类型int)
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
//for循环遍历char,记录到HashMap;key值是字符,value值是个数
for(int i = 0;i < c.length;i++){
//当key值为一个的时候,value=1,并put,反之则value+1
if(!map.containsKey(c[i])){
map.put(c[i],1);
}else{
int count=map.get(c[i])+1;//valu值加1
map.put(c[i],count);
}
}
System.out.print(map);//打印map验证
//将map.entrySet转换为List进行排序
// Map.Entry接口:
//Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。
ArrayList<Map.Entry<Character,Integer>> list = new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());
//使用collections.sort()方法
Collections.sort(list,new Compare<Map.entry<Character,Integer>>(){
//排序
@Override
public int compare(Entry<Character, Integer> o1,
Entry<Character, Integer> o2) {
//return o1.getValue().compareTo(o2.getValue());//顺序排序
return o2.getValue().compareTo(o1.getValue());//倒序排序
}
});
//通过for循环遍历所有数据
for(Map.Entry<Character,Integer>mapping:list){
System.oiut.print(mapping.getKey()+":"+mapping.getValue()+",");
}
}
}
//转自http://www.cnblogs.com/guanjie20/p/3769772.html
1.Map是java中的接口,Map.Entry是Map的一个内部接口。
2.Map提供了一些常用方法,如keySet()、entrySet()等方法。
3.keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
4.Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry