Map<Key,Value> 排序默认是按照KEY值的升序来进行。
针对按照Value来进行排序有两种方法:
第一种 使用TreeMap 代码如下
public class test{ public static void main(String[] args) { HashMap<String, Double> map = new HashMap<String, Double>(); valueComparator vComparator = new valueComparator(map); TreeMap<String, Double> sort_map = new TreeMap<String, Double>(vComparator); map.put("C", 96.8); map.put("D", 38.8); map.put("A", 188.9); map.put("B", 156.6); System.out.println("treeMap" + sort_map); } } public class valueComparator <T> implements Comparator<T> { Map<T , Double> map; public valueComparator(Map<T, Double> map) { this.map = map; } @Override public int compare(T o1, T o2) { // TODO Auto-generated method stub if(map.get(o1) - map.get(o2) >= 0) { return 1; } else { return -1; } } }
TreeMap实现排序
第二种 使用LinkedList 排序好后遍历插入到LinkedHashMap 下面代码使用了泛型 针对调用方的map的KEY ,VALUE值不作具体要求,通用性比上面第一种的实现要好很多,针对map包含数据量较大 ,比如百万级别,建议第二种 代码如下
package sortMap; import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class MapUtil { public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue( Map<K, V> map) { List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>( map.entrySet());// 将map的值传到LinkedList Collections.sort(list, new Comparator<Map.Entry<K, V>>() { public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) { return (o1.getValue()).compareTo(o2.getValue()); } }); Map<K, V> result = new LinkedHashMap<K, V>(); for (Entry<K, V> entry : list) { result.put(entry.getKey(), entry.getValue()); } return result; } }
LinkedHashMap
时间: 2024-10-13 18:23:24