java中的map能不能根据key排序

本篇内容介绍了“java中的map能不能根据key排序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

我们提供的服务有:网站建设、成都网站设计、微信公众号开发、网站优化、网站认证、岱山ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的岱山网站制作公司

java中map常用排序方式:按键排序(sort by key), 按值排序(sort by value)。

1、按键排序

jdk内置的java.util包下的TreeMap既可满足此类需求,向其构造方法 TreeMap(Comparator comparator)  传入我们自定义的比较器即可实现按键排序。

默认升序排序方法:

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
 
public class TEST {
 
    public static void main(String[] args) {
        TEST t = new TEST();
        t.sort();
    }
     
    public void sort(){
        Map treeMap = new TreeMap();
        treeMap.put("c", "ccccc"); 
        treeMap.put("a", "aaaaa"); 
        treeMap.put("b", "bbbbb"); 
        treeMap.put("d", "ddddd"); 
        Set s = treeMap.keySet();
        for (String key : s) { 
            System.out.println(key+" : "+treeMap.get(key)); 
        } 
    }
}

输出结果:

a : aaaaa
b : bbbbb
c : ccccc
d : ddddd

2、按值排序

按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。

Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。

原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List list, Comparator c)

来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

实现代码

public class MapSortDemo {

    public static void main(String[] args) {

        Map map = new TreeMap();

        map.put("KFC", "kfc");
        map.put("WNBA", "wnba");
        map.put("NBA", "nba");
        map.put("CBA", "cba");

        Map resultMap = sortMapByKey(map);    //按Key进行排序
//        Map resultMap = sortMapByValue(map); //按Value进行排序

        for (Map.Entry entry : resultMap.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }
    
    /**
     * 使用 Map按value进行排序
     * @param map
     * @return
     */
    public static Map sortMapByValue(Map oriMap) {
        if (oriMap == null || oriMap.isEmpty()) {
            return null;
        }
        Map sortedMap = new LinkedHashMap();
        List> entryList = new ArrayList>(
                oriMap.entrySet());
        Collections.sort(entryList, new MapValueComparator());

        Iterator> iter = entryList.iterator();
        Map.Entry tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
}

“java中的map能不能根据key排序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


文章标题:java中的map能不能根据key排序
本文地址:http://azwzsj.com/article/gdgcph.html