在java中如何给map键排序 5C

java在HashMap>>中,如何给你键排序

4个回答

其实可以用TreeMap,HashMap用法在下面
参考来源:https://www.cnblogs.com/zhujiabin/p/6164826.html

public class MapSortDemo {

    public static void main(String[] args) {

        Map<String, String> map = new TreeMap<String, String>();

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

        Map<String, String> resultMap = sortMapByKey(map);    //按Key进行排序

        for (Map.Entry<String, String> entry : resultMap.entrySet()) {
            System.out.println(entry.getKey() + " " + 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());

        sortMap.putAll(map);

        return sortMap;
    }
}


比较器类

class MapKeyComparator implements Comparator<String>{

    @Override
    public int compare(String str1, String str2) {

        return str1.compareTo(str2);
    }
}

参考来源:https://www.cnblogs.com/lovebread/archive/2009/11/23/1609121.html
HashMap排序

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("d", 2);
map.put("c", 1);
map.put("b", 1);
map.put("a", 3);

List<Map.Entry<String, Integer>> infoIds =
    new ArrayList<Map.Entry<String, Integer>>(map.entrySet());

//排序前
for (int i = 0; i < infoIds.size(); i++) {
    String id = infoIds.get(i).toString();
    System.out.println(id);
}
//d 2
//c 1
//b 1
//a 3

//排序
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {   
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {      
        //return (o2.getValue() - o1.getValue()); 
        return (o1.getKey()).toString().compareTo(o2.getKey());
    }
}); 

//排序后
for (int i = 0; i < infoIds.size(); i++) {
    String id = infoIds.get(i).toString();
    System.out.println(id);
}
//根据key排序
//a 3
//b 1
//c 1
//d 2
//根据value排序
//a 3
//d 2
//b 1
//c 1

hu_belif
hu_beliefs 楼主采纳,很完美,正解。
12 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 非常详细了
12 个月之前 回复

请使用sortedHashMap

public static void test4() {
    Map<String, String> map  = new HashMap<>(16);
    map.put("a", "b");
    map.put("b", "c");
    map.put("c", "d");
    map.put("d", "a");

    List<Map.Entry<String, String>> list = new ArrayList<>(map.entrySet());
    Collections.sort(list, new Comparator<Entry<String, String>>() {
        @Override
        public int compare(Entry<String, String> o1, Entry<String, String> o2) {
            // 倒序
            return o2.getKey().compareTo(o1.getKey());
        }
    });

    for (Entry<String, String> entry : list) {
        System.out.println(entry.getKey() +":"+entry.getValue());
    }
} 

有一个比较容易理解的方法.

Map<String,Object> map = new HashMap<String,Object>();//原始的HashMap
Set<String> keySet = map.keySet();//获取键的集合
String[] keyArray = keySet.toArray(new String[keySet.size()]);//将集合转换成数组
Arrays.sort(keyArray);//利用java.util.Arrays工具类给数组排序
//得到排序后的key后,就可以根据map.get(key)来使用了
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!