Java Map 按Key排序和按Value排序

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

public class MapSortDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Map<String, String> hMap = new HashMap<String, String>();
        hMap.put("a", "3");
        hMap.put("z", "2");
        hMap.put("b", "6");
        hMap.put("o", "9");

        System.out.println("根据key升序排序");
        Map<String, String> sortByKeyResultMap = sortMapByKey(hMap);    //按Key进行排序
        Iterator<Map.Entry<String, String>> sortByKeyEntries = sortByKeyResultMap.entrySet().iterator();
        while (sortByKeyEntries.hasNext()) {
          Map.Entry<String, String> entry = sortByKeyEntries.next();
          System.out.println("Key = " + entry.getKey() + "------->Value = " + entry.getValue());
        }

        System.out.println("------------------------------"); 

        System.out.println("根据value降序排序");
        Map<String, String> sortByValueResultMap = sortMapByValue(hMap); //按Value进行排序
        Iterator<Map.Entry<String, String>> sortByValueEntries = sortByValueResultMap.entrySet().iterator();
        while (sortByValueEntries.hasNext()) {
          Map.Entry<String, String> entry = sortByValueEntries.next();
          System.out.println("Key = " + entry.getKey() + "------->Value = " + entry.getValue());
        }
    }
    /**
     * 使用 Map按key进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByKey(Map<String, String> map) {
        if (map == null || map.isEmpty()) {
            return null;
        }
//        Map<String, String> sortMap = new TreeMap<String, String>(new MapKeyComparator());
        Map<String, String> sortMap = new TreeMap<String, String>(new Comparator<String>() {
            public int compare(String obj1, String obj2) {
                return obj1.compareTo(obj2);//升序排序
            }
        });
        sortMap.putAll(map);
        return sortMap;
    }

    /**
     * 使用 Map按value进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByValue(Map<String, String> map) {
        if (map == null || map.isEmpty()) {
            return null;
        }
        Map<String, String> sortedMap = new LinkedHashMap<String, String>();
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(map.entrySet());
//        Collections.sort(entryList, new MapValueComparator());
        Collections.sort(
            entryList,
            new Comparator<Map.Entry<String, String>>(){
                   public int compare(Entry<String, String> o1, Entry<String, String> o2) {
                       return o2.getValue().compareTo(o1.getValue());// 降序排序
                   }
            }
        );

        Iterator<Map.Entry<String, String>> iter = entryList.iterator();
        Map.Entry<String, String> tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
}
根据key升序排序
Key = a------->Value = 3
Key = b------->Value = 6
Key = o------->Value = 9
Key = z------->Value = 2
------------------------------
根据value降序排序
Key = o------->Value = 9
Key = b------->Value = 6
Key = a------->Value = 3
Key = z------->Value = 2

如果想把map排序代码分离出来就添加两个类,分别为

package test;

import java.util.Comparator;

public class MapKeyComparator implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }

}
package test;

import java.util.Comparator;
import java.util.Map;
import java.util.Map.Entry;

public class MapValueComparator implements Comparator<Map.Entry<String, String>> {

    @Override
    public int compare(Entry<String, String> o1, Entry<String, String> o2) {
        return o2.getValue().compareTo(o1.getValue());
    }

}

注意o1和o2的位置,它们在前还是在后就会变化升序和降序的顺序。

用key排序用以下代码

用value排序用以下代码

原文地址:https://www.cnblogs.com/silentmuh/p/10469974.html

时间: 2024-10-12 02:20:57

Java Map 按Key排序和按Value排序的相关文章

Java Map获取key和value 以及String字符串转List方法

一.问题描述 这里描述两个问题: 1.Java Map获取key和value的方法: 2.String字符串转List的方法: 二.解决方法 1.Java Map获取key和value的方法   2.String字符串转List的方法  

Java Map按照Key和Value排序【转】

package kingtool.sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import jav

Java Map按键(Key)排序和按值(Value)排序

Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value).1.按键排序jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator)  传入我们自定义的比较器即可实现按键排序. Java代码   public class MapSortDemo { public static void main(Strin

Java map 详解 - 用法、遍历、排序、常用API等

尊重原创:http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map. Map 提供了一个更通用的元素存储方法.Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值. 本文主要介绍java map的初始化.用法.map的四种常用的遍历方式.map的排序以及常用api. | |目录 1Map用法 ·类

JAVA map按照key,value比较

import java.util.*; public class MapSortDemo { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("1", "4");        map.put("3", "3");        map.put("2"

Java Map中key用可变对象会是什么后果?

结论:put之后key变化了在get就get为null了 Scala代码 val map = new mutable.HashMap[java.util.List[String], String]() val key = new util.ArrayList[String]() map.put(key, "value") println(map) println(map.get(key).getOrElse("null")) key.add("11&quo

java Map 迭代key,value 最简洁的方法

import java.util.HashMap; import java.util.Map; public class EntrySets { public static void main(String[] args) { Map<Object, Object> map = new HashMap<Object, Object>(); map.put("k1", "v1"); map.put("k2", "v

Java中Map根据键值(key)或者值(value)进行排序实现

我们都知道,java中的Map结构是key->value键值对存储的,而且根据Map的特性,同一个Map中 不存在两个Key相同的元素,而value不存在这个限制.换句话说,在同一个Map中Key是唯一的,而value不唯一.Map是一个接口,我们不能 直接声明一个Map类型的对象,在实际开发中,比较常用的Map性数据结构是HashMap和TreeMap,它们都是Map的直接子类.如果考虑到存取 效率的话,建议使用HashMap数据结构,而如果需要考虑到Key的顺序,建议使用TreeMap,但是

java Map 之 排序(key,value)

一:起因: (1)现实中需要Map容器进行排序的情况很多很多:因为Map<key,value>键值对的存储结构特别是HashMap的结构是非常优秀的,数据存储就难免对其进行排序: (2)数据处理,只要用到映射关系的,离不开Map,这在数据处理中是非常实用的,而排序是对数据的进一步处理: (3)Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value) 二:排序的算法 (1)按键排序 jdk内置的java.util包下的TreeMa