map中根据键key来进行排序
- 根据键key来进行排序比较容易,我们只需要使用map中的Treemap就可以实现,它会根据key值的自然顺序来进行排序。
- 下面用一个示例来进行说明演示,给定一串全部是小写字符的字符串,要求它能够按照字符的顺序输出各个字母出现了多少次。
public class javaPractice {
public static void main(String[] args) {
String str="aaassssbb";
//map函数的用法,根据key进行排序,,用TreeMap
TreeMap<Character,Integer> map=new TreeMap<Character, Integer>();
int len=str.length();
for(int i=0;i<len;++i){
Integer value=map.get(str.charAt(i));
int count=0;
if(value!=null){
count=value;
}
count++; //自增
map.put(str.charAt(i),count);
}
System.out.println(map.toString());
}
}
- 结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5b71618dfdf554c81d58c59055d6c278.png)
map中根据值value来进行排序
- 根据map的值value排序就没有直接的容器供我们使用了,我们可以先创建一个Hashmap将数据先存储进去,然后将map集合转到list集合中,这里我们用ArrayList,然后通过Collections.sort(List I,Comparator c)方法来进行排序。
- 下面通过一个示例来进行演示,还是上面的问题,这次我们根据字母出现的次数由多到少来进行排序value,当然value可能会相同,这时候根据key的顺序排序,就可以将Hashmap用为Treemap,或者comparator中进行调整。
public class javaPractice {
public static void main(String[] args) {
String str="aaaddssssbb";
//map函数的用法,根据value进行排序,先声明一个HashMap
HashMap<Character,Integer> map=new HashMap<Character, Integer>();
int len=str.length();
for(int i=0;i<len;++i){
Integer value=map.get(str.charAt(i));
int count=0;
if(value!=null){
count=value;
}
count++; //自增
map.put(str.charAt(i),count);
}
//将map集合转到list集合中去,list用Arraylist来实现
List<Map.Entry<Character,Integer>> list=new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());
//通过Collection.sort(List I,Comparator c)方法来进行排序,代码如下
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue()-o1.getValue();
}
});
//用foreach循环进行输出
for(Map.Entry<Character,Integer> a :list){
System.out.println(a.getKey()+":"+a.getValue());
}
}
}
- 结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bdffd7d79023407c71939683cd7a8661.png)