Java Map (Sorted by value)
Java Map Sorted By Value
java 中map类型按照value进行排序
- Hashmap 是一个常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取他的值,具有很快的访问速度,但是遍历的时候,取得的数据是完全随机的,这会导致按照顺序读取的时候和存入的顺序是不一样的。
- LinkedHashMap是HashMap的一个子类,保证了插入以及读取的顺序
- Entry:在Map类设计的时候,提供了一个嵌套接口(static修饰的接口)。Entry将键值对封装成为了一个对象,,这样我们在遍历Map集合的时候,就可以从每一个键值对(Entry)对象获取对应的键与对应的值。
- 重写Comparator接口
import java.util.*;
import java.util.Map.*;
class Solution{
public static void main(String[] args) {
Map<Integer,Integer> map = new HashMap<>();
map.put(1,3);
map.put(2,1);
map.put(3,2);
Map<Integer,Integer> result = new HashMap<>();
result = sortByValue(map);
System.out.println(result);
}
public static Map<Integer,Integer> sortByValue(Map<Integer,Integer> map){
// 将map中的键值对变成一个个对象,这样的话就可以重写Comparator接口
ArrayList<Entry<Integer,Integer>> l = new ArrayList<Entry<Integer,Integer>>(map.entrySet());
// 利用lambda排序
Collections.sort(l,(o1,o2)->(o1.getValue() - o2.getValue()));
/**
Collections.sort(l,new Comparator<Entry<Integer,Integer>>(){
@Override
public int compare(Map.Entry<Integer,Integer> o1,Map.Entry<Integer,Integer> o2){
return o1.getValue() - o2.getValue();
}
});
*/
// 如果这里使用普通的hashmap 则不会构成排序好的map 而是{1=3, 2=1, 3=2} 不是想要的{2=1, 3=2, 1=3} 原因上面有说
Map<Integer,Integer> result = new LinkedHashMap<>();
for(Entry<Integer,Integer> e:l) result.put(e.getKey(),e.getValue());
return result;
}
}
Saying Less Doing More