Home >Java >JavaBase >Can map in java be sorted based on key?

Can map in java be sorted based on key?

尚
Original
2020-01-14 13:32:514266browse

Can map in java be sorted based on key?

Commonly used sorting methods for map in java: sort by key, sort by value. Recommendation: java video tutorial

1. Sort by key

TreeMapb77a8d9c3c319e50d4b02a976b347910 under jdk’s built-in java.util package can meet such needs. Its construction method TreeMap(Comparatore3882fcc260fc32c6b751547559600d3 comparator) can be sorted by key by passing in our custom comparator.

Default ascending sorting method:

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<String, String> treeMap = new TreeMap<String, String>();
        treeMap.put("c", "ccccc"); 
        treeMap.put("a", "aaaaa"); 
        treeMap.put("b", "bbbbb"); 
        treeMap.put("d", "ddddd"); 
        Set<String> s = treeMap.keySet();
        for (String key : s) { 
            System.out.println(key+" : "+treeMap.get(key)); 
        } 
    }
}

Output result:

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

2. Sorting by value

Sorting by value is relatively troublesome. It seems that there is no directly available data structure that can handle similar requirements, so we need to convert it ourselves.

Map itself is very meaningful to sort by value. In many situations, similar requirements will be encountered, and its value can be considered to be some defined rule or weight.

Principle: Place all the elements in the Map to be sorted into a list, and then use a static method of Collections sort(List8742468051c85b06f0a0af9e3e506b5c list, Comparator117c5a0bdb71ea9a9d0c2b99b03abe3e c)

To sort the list, also use a comparator to define comparison rules. The elements in the sorted list are then loaded into the Map in sequence. In order to definitely ensure that the elements in the Map are in the same order as the elements in the sorted List, the LinkedHashMap data type is used.

Implementation code

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进行排序
//        Map<String, String> resultMap = sortMapByValue(map); //按Value进行排序

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

        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;
    }
}

For more java knowledge, please pay attention to the java basic tutorial column on the PHP Chinese website.

The above is the detailed content of Can map in java be sorted based on key?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn