Java对map的key或是value值排序

简单介绍Map

map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

 HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。

 TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

 Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

 LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。

对map的key值进行排序

在定义这个map的时候,直接使用treeMap就可以了,在打印这个map的时候,直接就是按key值的升序排列

TreeMap<String,Double> mapTest1 = new TreeMap<>();
mapTest1.put("A", 1.7);
mapTest1.put("R", 1.4);
mapTest1.put("B", 1.5);
mapTest1.put("N", 1.6);
mapTest1.put("D", 1.6);
System.out.println(mapTest1);
后面的是打印的结果
{
    
    A=1.7, B=1.5, D=1.6, N=1.6, R=1.4}

如果需要降序的话,需要做以下的处理

这是在定义treemap的时候,都需要直接处理这个treemap;
Map<String, Double> map = new TreeMap<String, Double>(new Comparator<String>() {
    
    
	public int compare(String obj1, String obj2) {
    
    
	    // 降序排序
	    return obj2.compareTo(obj1);
	}
 });
map.put("A", 1.7);
map.put("R", 1.4);
map.put("B", 1.5);
map.put("N", 1.6);
map.put("D", 1.6);
System.out.println(map)
{
    
    R=1.4, N=1.6, D=1.6, B=1.5, A=1.7}

对map的value值进行排序

下面的是对map中的value值进行升序

HashMap<String,Double> mapTest1 = new HashMap<>();
mapTest1.put("A", 1.7);
mapTest1.put("R", 1.4);
mapTest1.put("B", 1.5);
mapTest1.put("N", 1.6);
mapTest1.put("D", 1.6);

public static void name2(HashMap<String,Double> mapTest) {
    
    
		
	System.out.println(mapTest.toString());
	//这里将map.entrySet()转换成list
       List<Map.Entry<String,Double>> list = new ArrayList<Map.Entry<String,Double>>(mapTest.entrySet());
       //然后通过比较器来实现排序
       Collections.sort(list,new Comparator<Map.Entry<String,Double>>() {
    
    
           //升序排序
           public int compare(Entry<String, Double> o1,Entry<String, Double> o2) {
    
    
               return o1.getValue().compareTo(o2.getValue());
           }
           
       });
	
       for(Map.Entry<String,Double> mapping:list){
    
     
           System.out.println(mapping.getKey()+":"+mapping.getValue()); 
      }
}

name2(mapTest1);
R:1.4
B:1.5
D:1.6
N:1.6
A:1.7

上面是对map的value进行升序的,如果是降序需要自己更新一下就行了

HashMap<String,Double> mapTest1 = new HashMap<>();
mapTest1.put("A", 1.7);
mapTest1.put("R", 1.4);
mapTest1.put("B", 1.5);
mapTest1.put("N", 1.6);
mapTest1.put("D", 1.6);

public static void name4(HashMap<String,Double> mapTest) {
    
    
	
	System.out.println(mapTest.toString());
	//这里将map.entrySet()转换成list
       List<Map.Entry<String,Double>> list = new ArrayList<Map.Entry<String,Double>>(mapTest.entrySet());
       //然后通过比较器来实现排序
       Collections.sort(list,new Comparator<Map.Entry<String,Double>>() {
    
    
           //升序排序
           public int compare(Entry<String, Double> o1,Entry<String, Double> o2) {
    
    
               return o2.getValue().compareTo(o1.getValue());
           }
           
       });
	
       for(Map.Entry<String,Double> mapping:list){
    
     
           System.out.println(mapping.getKey()+":"+mapping.getValue()); 
      }
}

name4(mapTest1);
这是最后的输出
A:1.7
D:1.6
N:1.6
B:1.5
R:1.4

猜你喜欢

转载自blog.csdn.net/mao2430524817/article/details/129821838