Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >排序算法

排序算法

作者头像
ppjun
发布于 2018-09-05 04:05:58
发布于 2018-09-05 04:05:58
34400
代码可运行
举报
文章被收录于专栏:ppjun专栏ppjun专栏
运行总次数:0
代码可运行

由多到少依次输出元素的出现次数。下面每一行代码都有对应的标注。另附kotlin版

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Test {
    public static void main(String args[]) {
        //创建字符串数组
        String[] example = {"abc", "abc", "def", "abc", "def", "aaa"};
        //创建HashMap,保存元素和出现次数
        HashMap<String, Integer> map = new HashMap<>(16);
        //for循环数组,加入元素和出现次数,通过key获取出现次数,没就把出现次数设置为1,而再次出现出现次数就加1。
        for (String str : example) {
            Integer count = map.get(str);
            map.put(str, count == null ? 1 : count + 1);
        }
        //打印元素以及其出现次数
        for (String key : map.keySet()) {
            // System.out.println(key+":"+map.get(key));
        }
        //创建List对象,传入map.entry对象
        List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
        //创建static类ValueComparator,值比较器
        ValueComparator vc = new ValueComparator();
        //调用sort方法排序
        Collections.sort(list, vc);
        //输出大到小排序结果
        for (Map.Entry<String, Integer> m : list) {
            System.out.println(m.getKey() + ":" + m.getValue());
        }
    }
    static class ValueComparator implements Comparator<Map.Entry<String, Integer>> {

        @Override
        public int compare(Map.Entry<String, Integer> m, Map.Entry<String, Integer> n) {
            //小到大的顺序
            // m.getValue()-n.getValue();
            // 大到小的顺序
            return n.getValue() - m.getValue();
        }
    }
}

输出结果: abc:3 def:2 aaa:1

下面是kotlin 版

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Test2 { 
 fun main(args: Array<String>) {
 val example = arrayOf("abc", "abc", "def", "abc", "def", "aaa")
        val map = HashMap<String, Int>(16)
        for (str in example) {
            val count = map[str]
            map[str] = count?.plus(1) ?: 1
        }
        val list = ArrayList<Map.Entry<String, Int>>()
        list.addAll(map.entries)
        val vc = ValueComparator()
        Collections.sort(list, vc)
        for (entry in list) {
            Log.i("debug=", entry.key + ":" + entry.value)
        }
}
    class ValueComparator : Comparator<Map.Entry<String, Int>> {
        override fun compare(o1: Map.Entry<String, Int>, o2: Map.Entry<String, Int>): Int {
            return o2.value - o1.value
        }

    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 高效编程·HashMap 排序
HashMap 的值是没有顺序的,它是按照 key 的 HashCode 来实现的,对于这个无序的 HashMap 我们要怎么来实现排序呢?
数媒派
2022/12/01
8180
Java集合类的使用心得
常用结构:SortedSet是个接口,TreeSet是它的唯一实现类,其中的元素是有序的。
matt
2022/10/25
4620
12:集合map、工具类
一、map集合 Map:一次添加一对元素。Collection 一次添加一个元素。 Map也称为双列集合,Collection集合称为单列集合。 其实map集合中存储的就是键值对(结婚证书), map
六月的雨
2018/05/14
1K0
hashmap顺序遍历_遍历排序
hashmap元素排序 想要hashmap中的元素有序可以使用linkedHashMap。
全栈程序员站长
2022/09/30
1.5K0
java map遍历、排序,根据value获取key
若要取 map 中 value 的最大值 或 与之对应的 key(整型或浮点型):可利用list
Krry
2018/09/10
8.6K0
Java当中的集合框架Map
Sunday(星期天)、Monday(星期一)、Tuesday(星期二)、Wednesday(星期三)、Thursday(星期四)、Friday(星期五)、Saturday(星期六)
达达前端
2022/04/29
5100
Java当中的集合框架Map
JAVA map排序实现
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。
全栈程序员站长
2022/09/14
6190
Java中对map按key或val排序
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式:
sunonzj
2022/06/21
1.8K0
增强for循环
需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
秋落雨微凉
2022/10/25
1.3K0
增强for循环
Map排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。 按键排序(sort by key) jdk内置的J
xiangzhihong
2018/02/01
7670
Map排序
又双叒叕一行代码:Map按值排序
在分段随机实践—模拟线上流量一文中,我将流量模型统计成为一个个Map<F, Integer>形式数据保存起来。
FunTester
2021/07/23
9610
Java学习笔记(三):集合类与常用数据结构的典型用法
foochane :https://foochane.cn/article/2019122801.html 1 Collection集合 1.1 集合概述 在前面基础班我们已经学习过并使用过集合A
foochane
2020/02/13
9300
Java编程的一些小技巧-----基础语法篇(2)
比如上面的代码,只跳出了最里面的一层循环,如果要跳出两层循环,应该咋办?可以用break+label的语法,例子如下
秃头哥编程
2019/06/04
5570
4个主要的map实现类介绍
map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):
全栈程序员站长
2022/09/02
2930
java基础第十四篇之Map
一,Map集合的特点: * * 1.Map集合和Collection集合,没有关系 * * 2.Map集合的元素是成对存在(夫妻关系) * Collection集合的元素是独立存在的(单身关系) * * 3.Map集合的元素不能重复(是元素的key值不能重复) * * 总结: * Collection集合我们一般称为单列集合 * Map集合我们称为双列集合 * 二,Map接口下常用的实现类 * * HashMap<K,V>:底层是哈希表结构,无序的(存取顺序不一致) * * * LinkedHashMap<K,V>:底层链表+哈希表结构,有序的(存取顺序一致) * 这里<K,V>是两个泛型,这里的K和V可以相同 也可以不同 * K代表键的类型,V代表的是值的类型 * * 以上所有的实现类,保证键的唯一性(键不能重复),那么我们需要重写K这种类型的hashCode和equals方法 * 比如:K的类型是String,Integer...(java提供的类型),那么我们不需要管他 * K的类型是Person,Dog等自定义类型 那么我们就需要重写hashCode和equals方法 * * 三,Map接口中定义的常用方法: * * 1.增加: * public V put(K key,V value);//向Map集合中添加一个元素(键值对) * 返回值:表示被新的键值对 覆盖的那个旧的键值对的值 * 如果没有覆盖,返回值是null * * 2.删除: * public V remove(Object key);//删除一个键值对(根据键来删除) * * 3.改:实际上就是put方法,只要put的时候键和map集合中原有的键重复,就可以达到改的目的 * * 4.查 * public V get(Object key);//根据键 来查找键所对应的值 public interface InterfaceA { public abstract void showA(); interface InterfaceB{//内部接口 public abstract void showB(); } }
海仔
2019/08/05
3740
Java容器及其常用方法汇总
Java Collections 框架中包含了大量的接口及其实现类和操作它们的算法,主要包括列表(List)、集合(Set)、映射(Map),如下:
科技新语
2025/02/13
1600
Java容器及其常用方法汇总
Java基础之集合
-集合结构只要发生改变,迭代器必须重新获取,如果还是用的之前的迭代器,就会出现异常java.util.ConcurrentModificationException
shaoshaossm
2022/12/27
5410
Java基础之集合
Leetcode 347.Top K Frequent Elements
Top K Frequent Elements   一句话理解题意:输出数组中出现次数对多的k个数。   在如果用C语言来写这个题目,思路就是先按数的大小排序,然后再用一个结构体数组保存每个数的出现次次数。 因为数组已经有序了,所以只需要遍历一次数组就可以获得每个数的出现次数了。 结构体如下
xindoo
2021/01/21
5180
【数据结构】map&set详解
Set接口是一种不包含重复元素的集合。它继承自Collection接口,所以可以使用Collection所拥有的方法,Set接口的实现类主要有HashSet、LinkedHashSet、TreeSet等,它们各自以不同的方式存储元素,但都遵循Set接口的规定。
2的n次方
2024/10/15
1810
【数据结构】map&set详解
【算法题解】 Day16 排序
每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:
sidiot
2023/08/31
1550
相关推荐
Java 高效编程·HashMap 排序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验