package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class Zhongwen_Shuzi_Times { public static void main(String[] args) { /* * 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 */ String str="琅琊榜fengqichanglin987琅榜623231212314safdbcbde"; char[] arr=str.toCharArray(); Map<Character,Integer> map=new HashMap<Character,Integer>(); int num=0; for(char c:arr) { map.put(c, num); } for(Entry<Character,Integer> entry:map.entrySet()) { System.out.println(entry.getKey().toString()+entry.getValue()); } for(char c:arr) { if(map.containsKey(c)) { num=map.get(c); num++; map.remove(c); map.put(c, num); } } for(Entry<Character,Integer> entry:map.entrySet()) { System.out.print(entry.getKey().toString()+"-"+entry.getValue()+" "); } } }
按键值的降序排序
package com.swift; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class Zhongwen_Shuzi_Times { public static void main(String[] args) { /* * 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数,按值的降序排序,如果值相同则按键值的字母顺序 */ String str="琅琊榜fengqichanglin987琅榜623231212314safdbcbde"; char[] arr=str.toCharArray(); Map<Character,Integer> map=new TreeMap<Character,Integer>(new Comparator<Character>() {//这里只能按键值排序 @Override public int compare(Character o1, Character o2) { return o2-o1;//降序 } }); int num=0; for(char c:arr) { map.put(c, num); } for(Entry<Character,Integer> entry:map.entrySet()) { System.out.println(entry.getKey().toString()+entry.getValue()); } for(char c:arr) { if(map.containsKey(c)) { num=map.get(c); num++; map.remove(c); map.put(c, num); } } for(Entry<Character,Integer> entry:map.entrySet()) { System.out.print(entry.getKey().toString()+"-"+entry.getValue()+" "); } } }
按值的降序排序,如果值相同则按键值的字母顺序
要注意这个问题:
不能把map.entrySet()直接强转成List<Entry<Character,Integer>>
需要用new ArrayList()的构造,即放在参数中
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class Zhongwen_Shuzi_Times { public static void main(String[] args) { /* * 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数,按值的降序排序,如果值相同则按键值的字母顺序 */ String str="琅琊榜fengqichanglin987琅榜623231212314safdbcbde"; char[] arr=str.toCharArray(); Map<Character,Integer> map=new TreeMap<Character,Integer>(); int num=0; for(char c:arr) { map.put(c, num); } for(char c:arr) { if(map.containsKey(c)) { num=map.get(c); num++; map.remove(c); map.put(c, num); } } for(Entry<Character,Integer> entry:map.entrySet()) { System.out.print(entry.getKey().toString()+"-"+entry.getValue()+" "); } List<Entry<Character,Integer>> list=new ArrayList<Entry<Character, Integer>>(map.entrySet()); Collections.sort(list, new Comparator<Entry<Character,Integer>>(){ @Override public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) { int num=o2.getValue()-o1.getValue(); return num==0?o1.getKey()-o2.getKey():num; } }); System.out.println(); for(Entry<Character,Integer> entry:list) { System.out.print(entry.getKey().toString()+"-"+entry.getValue()+" "); } } }