利用TreeMap 排序取topN代码

该博客展示了如何利用Java的TreeMap按照key降序排列并实现TopN操作。通过创建一个自定义Comparator来反转比较结果,使得TreeMap在默认升序的基础上变为降序。在不断添加元素到TreeMap的同时,当元素数量超过指定TopN值时,通过pollLastEntry()方法移除最小的元素,从而保持TreeMap内始终保存最大的N个元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.shizhan;

import org.apache.flink.api.java.tuple.Tuple2;

import java.sql.Timestamp;
import java.util.*;

public class TreeMapDemo {
    public static void main(String[] args) {
        //treemap按照key降序排列,相同count值不覆盖
        TreeMap<Integer, Tuple2<String, Integer>> treemap = new TreeMap<Integer, Tuple2<String, Integer>>(
                new Comparator<Integer>() {

                    @Override
                    public int compare(Integer y, Integer x) {
                        return (x < y) ? -1 : 1;
                    }

                });
        List<Tuple2<String, Integer>> list =  new ArrayList<Tuple2<String, Integer>>();
        list.add(new Tuple2<String, Integer>("a",10));


        list.add(new Tuple2<String, Integer>("b",3));
        list.add(new Tuple2<String, Integer>("b",4));

        list.add(new Tuple2<String, Integer>("c
### Java TreeMap 默认构造函数 Java中的`TreeMap`是一个基于红黑树实现的有序映射表,能够自动维持键值对按照键升序排列[^3]。当使用默认构造函数创建`TreeMap`实例时: ```java TreeMap<String, Integer> map = new TreeMap<>(); ``` 此构造函数初始化了一个空的`TreeMap`对象,并采用自然顺序来对键进行排序[^1]。 对于字符串类型的键,默认情况下会依据字典顺序来进行排序;如果是数值型,则按从小到大排序。下面给出一个具体的例子展示如何利用无参数构造器构建并操作`TreeMap`: ```java import java.util.TreeMap; public class Main { public static void main(String[] args) { // 创建一个新的TreeMap实例 TreeMap<String, Integer> scores = new TreeMap<>(); // 向map中添加一些元素 scores.put("Alice", 89); scores.put("Bob", 78); scores.put("Charlie", 90); // 输出所有的key-value对 System.out.println(scores.toString()); // 获最高分的学生名字及其分数 String topStudentName = scores.lastEntry().getKey(); int highestScore = scores.lastEntry().getValue(); System.out.printf("Top student is %s with score %d%n", topStudentName, highestScore); } } ``` 这段代码展示了怎样通过调用不带任何参数的构造方法建立一个`TreeMap`实例,并向其中加入若干条记录以及访问这些数据的方式。由于采用了默认构造方式,所以这里的键(即学生姓名)会被自动依照字母表先后次序整理好[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值