美文网首页
自定义TreeMap的比较器

自定义TreeMap的比较器

作者: 鉴闻俗说 | 来源:发表于2017-11-01 15:30 被阅读0次
  • 通过查看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完成一个小题目
下一篇:泛型

相关文章

  • 自定义TreeMap的比较器

    通过查看java文档,TreeSet有一个构造方法,参数为Comparator(类型为键值的类型或者其子类) 用一...

  • Map集合之TreeMap

    TreeMap: 键不允许重复 底层是树的结构 可排序TreeMap 如果将自定义类放在 key的位置 ,...

  • TreeMap源码分析

    一.TreeMap的特性 TreeMap是有序的,可以自定义排序规则,如果不指定则按照默认的规则排序 二.Tree...

  • 某头条面试题

    linkedhashmap treemap hashmap 自定义view glide 线程池 ams 启动应用 ...

  • TreeSet实现自定义对象

    有两种方法 自定义比较器 实现比较器接口

  • 部分OJ记录

    hashmap遍历方式 treemap自定义顺序http://www.cnblogs.com/liujinhong...

  • 集合4

    Map注意事项总结:1.什么类型的数据可以作为TreeMap的key:(1)实现了Comparator接口的比较器...

  • TreeSet

    TreeSet的特点:1、排序:1)自然排序2)比较器排序 2、唯一:底层通过TreeMap实现了元素的唯一性。 ...

  • HashMap、LinkedHashMap及缓存的实现

    TreeSet基于TreeMap实现默认按key的插入顺序排序底层是红黑树实现,如果比较器返回-1,则会放在左子树...

  • 第九章、HashMap、TreeMap和HashTable

    Map接口有三个比较重要的实现类: 分别是HashMap、TreeMap和HashTable。 TreeMap是有...

网友评论

      本文标题:自定义TreeMap的比较器

      本文链接:https://www.haomeiwen.com/subject/gyhgpxtx.html