自定义TreeMap的比较器

  • 通过查看java文档,TreeSet有一个构造方法,参数为Comparator(类型为键值的类型或者其子类)
/**
*根据给定的比较器,构造一个新的TreeMap。插入Map的所有键值对必须由给定的比较器相互比较\键的大小。
*comparator.compare(k1, k2)对于Map中的任何键k1、k2都不得抛出ClassCastException异常。
* 如果用户试图将一个违反该Map约束的键放入的Map中,则put(Object key,Object value)调用将抛出*ClassCastException异常。
**/
public TreeMap(Comparator<? super K> comparator)

用一个简单的Demo说明:

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;

/**
 * 自定义TreeMap的比较器
 */
public class MapTest6
{
    public static void main(String[] args)
    {
        // 利用TreeMap的有序性,存储数字及其出现次数,key为数字,value为次数
        TreeMap<Integer, Integer> map = new TreeMap<>(new MapComparator());
    
        /**
         * 随机生成[10,50]间的40个数字,并统计每个数字出现的次数
         */
        Random random = new Random();
        for (int i = 0; i < 40; i++)
        {
            int num = random.nextInt(41) + 10;

            if (map.get(num) == null)
            {
                map.put(num, 1);
            }
            else
            {
                int count = map.get(num);
                map.put(num, count + 1);
            }
        }

        // 遍历map,按照key的逆序输出
        Set<Map.Entry<Integer, Integer>> set = map.entrySet();
        for (Iterator<Map.Entry<Integer, Integer>> iterator = set.iterator(); iterator.hasNext();)
        {
            Map.Entry<Integer, Integer> entry = iterator.next();
            Integer key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + "的出现次数为:" + value);
        }
    }
}

//自定义比较器根据键的逆序排列
class MapComparator implements Comparator<Integer>
{
    @Override
    public int compare(Integer o1, Integer o2)
    {
        return o2 - o1;
    }
}

上一篇:利用Map完成一个小题目
下一篇:泛型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,290评论 0 16
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 前言:最近感冒的不太想去面试,在家就对Java se的基础做了一些小总结 1.JDK和JRE的区别 一 基础知识 ...
    AntCode阅读 1,141评论 0 1
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,524评论 0 3
  • 妈妈年近五十,是一所学校的保洁阿姨。周一至周五,每天“朝五晚九”。不仅要维护校园卫生,若遇上差事,还要经常加班加点...
    godblessu阅读 412评论 0 1