java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

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()+" ");
} } }

按值的降序排序,如果值相同则按键值的字母顺序

要注意这个问题:

java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

不能把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()+" ");
}
} }

java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序

上一篇:java算法面试题:有数组a[n],用java代码将数组元素顺序颠倒


下一篇:IOS微信点击input弹出输入法,关闭后页面留白解决方案