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;
	} 
}
posted @ 2020-11-10 10:22  BOTAK  阅读(284)  评论(0编辑  收藏  举报