Loading...
墨滴

Bayanbulake

2021/11/20  阅读:24  主题:自定义主题1

Map排序

前言

在Java中Map是一种无序的键值对数据结构,在我们对Map进行遍历的时候,拿到的结果是随机的。Map的这种性质在其它语言中也是如此。

因为Map真的是一种非常常用,而且使用简单的数据结构。

正因为Map如此好用,大家有没有想过,如果有一种需求,我们需要对Map进行排序,你该怎么做呢?

或许实现这个功能的方式会有多种,但是今天和大家分享一个自己实际项目中使用的方法。

Map排序

package com.geovis.bin.utils;

import javax.validation.constraints.NotNull;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

/**
 * @Author Wangb
 * @Date 2021/11/12 21:56.
 */

public class MapUtil {
    /**
     * 使用key实现Map<String,String>排序的方法
     *
     * @param flag
     * @return
     */

    public static Map<String, String> sortMap(@NotNull boolean flag) {
        Map<String, String> map;
        if (Boolean.TRUE.equals(flag)) {
            map = new TreeMap<>(Comparator.naturalOrder());
            map.put("c""ccc");
            map.put("d""ddd");
            map.put("w""www");
            map.put("q""qqq");
            map.put("f""fff");
            map.put("j""jjj");
        } else {
            map = new TreeMap<>(Comparator.reverseOrder());
            map.put("c""ccc");
            map.put("d""ddd");
            map.put("w""www");
            map.put("q""qqq");
            map.put("f""fff");
            map.put("j""jjj");

        }
        return map;
    }

    public static void main(String[] args) {

        Iterator<Map.Entry<String, String>> iterator =           sortMap(true).entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> next = iterator.next();
            System.out.println("key:"+next.getKey() + " value:"+next.getValue());
        }

    }


}

验证

我们在工具类里面调用我们写的这个map排序的方法,给方法传入true,调用结果如下:

如果我们给方法传入false,结果如下:

我们会发现,我们原本插入的值的顺序被打乱了,控制台打印输出的结果也是无序的。这也从正面印证了迭代map所输出的结果时无序的。

总结

上面的方法实现起来个人认为比较简单,而且易懂,很适合直接在项目中使用。

其原理就是程序在构造TreeMap的时候实现了Comparator(T)功能性接口,进而帮助我们对map进行排序。

如果您需要倒序排列的话,主需要在调用sortMap()时,传入false即可

println("111")

Bayanbulake

2021/11/20  阅读:24  主题:自定义主题1

作者介绍

Bayanbulake