自定义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 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 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> set = map.entrySet();
        for (Iterator> iterator = set.iterator(); iterator.hasNext();)
        {
            Map.Entry entry = iterator.next();
            Integer key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + "的出现次数为:" + value);
        }
    }
}

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

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

你可能感兴趣的:(自定义TreeMap的比较器)