Home > Java > JavaBase > body text

Can map in java be sorted based on key?

Release: 2020-01-14 13:32:51
Original
4226 people have browsed it

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

TreeMap under jdk’s built-in java.util package can meet such needs. Its construction method TreeMap(Comparator 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)); 
        } 
    }
}
Copy after login

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(List list, Comparator 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;
    }
}
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template