Map和Collections是同级别的,不能像List排序那样直接用Collections.sort(new Comparator<?>(){ 复写compara方法});

HashMap没有排序

TreeMap默认排序为升序,注意是按键值key排序

package com.swift;

import java.util.Comparator;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap; public class Scanner_String_ABCD_Times_jiangxu { public static void main(String[] args) {
/*
* 输入字符串,统计A、B、C、D、出现次数,由高到低输出字母和出现次数
*/ Scanner scan=new Scanner(System.in);
System.out.println("请输入一个字符串,用于统计A、B、C、D出现次数:");
String str=scan.nextLine();
//降序
Map<Character,Integer> map=new TreeMap<Character,Integer>(new Comparator<Character>() { @Override
public int compare(Character arg0, Character arg1) { return arg1.compareTo(arg0);
} });
map.put('A', 0);
map.put('B', 0);
map.put('C', 0);
map.put('D', 0);
map.put('a', 0);
map.put('b', 0);
map.put('c', 0);
map.put('d', 0); char[] arr=str.toCharArray();
for(char c:arr) {
if(map.containsKey(c)) {
Integer i=map.get(c);
i++;
map.remove(c);
map.put(c, i);
}
} for(Map.Entry<Character, Integer> entry:map.entrySet()) {
System.out.println(entry.getKey()+"~~"+entry.getValue());
} for(Map.Entry<Character, Integer> entry:map.entrySet()) {
System.out.println(entry.getKey()+"~~"+entry.getValue());
}
} }

根据TreeMap的value来进行排序。对value排序还是需要借助于Collections的sort(List<T> list, Comparator<? super T> )

package com.swift;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap; public class Scanner_String_ABCD_Times_jiangxu { public static void main(String[] args) {
/*
* 输入字符串,统计A、B、C、D、出现次数,由高到低输出字母和出现次数
*/ Scanner scan=new Scanner(System.in);
System.out.println("请输入一个字符串,用于统计A、B、C、D出现次数:");
String str=scan.nextLine(); Map<Character,Integer> map=new TreeMap<Character,Integer>();
map.put('A', 0);
map.put('B', 0);
map.put('C', 0);
map.put('D', 0);
map.put('a', 0);
map.put('b', 0);
map.put('c', 0);
map.put('d', 0); char[] arr=str.toCharArray();
for(char c:arr) {
if(map.containsKey(c)) {
Integer i=map.get(c);
i++;
map.remove(c);
map.put(c, i);
}
}
//遍历
for(Map.Entry<Character, Integer> entry:map.entrySet()) {
System.out.println(entry.getKey()+"~~"+entry.getValue());
} //把map.entrySet转换为list 用Collections.sort(list,new Comparator<>(){});排序 降序
List<Map.Entry<Character,Integer>> list=new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());//不能把map.entrySet() cast to(强转) list,需要构造
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>(){ @Override
public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
int i=o2.getValue()-o1.getValue();
return i;
} }); //不要再遍历map,而要遍历已排序的list
for(Map.Entry<Character, Integer> entry:list) {
System.out.println(entry.getKey()+"~~"+entry.getValue());
}
} }

Java基础操作面试题:Map集合排序 需要TreeMap 构造方法参数有比较器 输入字符串,统计A、B、C、D、出现次数,由高到低输出字母和出现次数,使用Map集合完成此题的更多相关文章

  1. Java基础知识强化之集合框架笔记49:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台

    1. 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)按照总分从高到低输出到控制台: 分析: A: 定义学生类    B: 创建一个TreeSet集合       C: 总分从高到底如何实现 ...

  2. Java基础语法面试题50题整理(带答案)

    嗯,之前某些原因整理了这份面试题,加油生活 (:   0,嗯,先做简单的,那个不对() 1,int [] sy = {0,9,2,3}; 2,int [] sy1 = new int[4]; 3,in ...

  3. 40道Java基础常见面试题及详细答案

    最近看到网上流传着各种面试经验及面试题,往往都是一大堆技术题目贴上去,但是没有答案. 为此我业余时间整理了40道Java基础常见的面试题及详细答案,望各路大牛发现不对的地方不吝赐教,留言即可. 八种基 ...

  4. Java基础常见笔试题总结

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件 2.“sta ...

  5. 80道最新java基础部分面试题(六)

    自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步! 59.ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collecti ...

  6. java基础常见面试题,这是一篇超长的随笔!!!

    1. Java基础部分....................................................... 4 1.一个".java"源文件中是否可以包括 ...

  7. 【面试题】Java基础部分面试题

    Java基础面试题 Equals与==的区别 使用==比较原生类型如:boolean,,int,char等等,  使用equals()比较对象. 1.  ==是判断两个变量或类型是不是指向同一个内存空 ...

  8. 2019年最新50道java基础部分面试题

    [软帝学院]1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".j ...

  9. Java基础知识强化52:经典排序之冒泡排序(BubbleSort)

    1. 冒泡排序的原理图: 2. 冒泡排序代码实现: package cn.itcast_01; /* * 数组排序之冒泡排序: * 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 ...

随机推荐

  1. js中的原型以及原型链

    在js中原型是每个构造函数的属性: 这个算 js 核心概念的一部分 var f1 = new Foo(); 对象 f1 的构造函数就是 Foo , f1的原型 __proto__ 就指向构造函数 Fo ...

  2. React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  3. 基于 Laravel Route 的 ThinkSNS+ Component

    这里是传送门: <ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1[ThinkSNS+研发日记系列一]> <基于 Laravel 开发 Th ...

  4. 一个小时学会 MySQL 数据库

    随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道. 一.数据库概要 数据库(Database)是存储与管理数据的软件系统,就像一个存入 ...

  5. String,StringBuffer和StringBuilder

    String,StringBuffer和StringBuilder分别应该在什么情况下使用? String 是Java的字符串类,其实质上也是用Char类型存储的,但是除了hash属性,其他的属性都声 ...

  6. docker网络设置(待整理)

      手动指定容器的配置      -h HOSTNAME or --hostname=HOSTNAME  \\设定容器的主机名.      --dns=IP_ADDRESS  \\指定DNS地址.  ...

  7. JavaScript 与 CSS 滚动实现最新指南

    一些(网站)滚动的效果是如此令人着迷但你却不知该如何实现,本文将为你揭开它们的神秘面纱.我们将基于最新的技术与规范为你介绍最新的 JavaScript 与 CSS 特性,(当你付诸实践时)将使你的页面 ...

  8. C# 字符串string

    一.引言 在 C# 中,字符串是System.String类的一个引用类型.但与其他引用类型不同的是,C#将字符串视为一个基本类型,它可以申请为一个常量,也可以直接给它赋值. string关键字是Sy ...

  9. Codeforces Round #566 (Div. 2) A. Filling Shapes

    链接: https://codeforces.com/contest/1182/problem/A 题意: You have a given integer n. Find the number of ...

  10. STM32空闲中断

    收发共存的思路没有经过验证!!! 空闲中断:既可以用来作为不定长接收数据帧的断帧判断/特别是DMA数据的接收,也可以用来指示中断发送的结束. 在需要发送的地方USART_ITConfig(UART5, ...