Map 按key和value 排序

简介:

Map的排序常分为两种情况,1、按key值排序;2、按value排序

   默认的情况下,TreeMap:是按key升序,进行排序的;LinkedHashMap:是按加入顺序进行排序的;HashMap:内部数值的顺序并不是以存放的先后顺序为主,而是以hash值的顺序为主,其次才是存放的先后顺序。

    1.我们先讨论按key值进行排序
我们先看一下这个Sorter类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public  class  Sorter {
     public  static  Map sort(Map map) {
         Map<Object, Object> mapVK =  new  TreeMap<Object, Object>(
             new  Comparator<Object>() {
                 public  int  compare(Object obj1, Object obj2) {
                     String v1 = (String)obj1;
                     String v2 = (String)obj2;
                     int  s = v2.compareTo(v1);
                     return  s;
                 }
             }
         );
         Set col = map.keySet();
         Iterator iter = col.iterator();
         while  (iter.hasNext()) {
             String key = (String) iter.next();
             Integer value = (Integer) map.get(key);
             mapVK.put(key, value);
         }
         return  mapVK;
     }
     
}

最后给出一个例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public  class  SortHashMap {
     public  SortHashMap() {
     }
     public  static  void  main(String[] args) {
         Map<String, Integer> maps =  new  HashMap<String, Integer>();
         maps.put( "boy" 8 );
         maps.put( "cat" 7 );
         maps.put( "dog" 1 );
         maps.put( "apple" 5 );
         //排序前的输出
         Set set = maps.entrySet();
         Iterator i = set.iterator();
         while (i.hasNext()){
             Map.Entry<String, Integer> entry1=(Map.Entry<String, Integer>)i.next();
             System.out.println(entry1.getKey() +  "-------->"  + entry1.getValue());
         }
         System.out.println( "----------------" );
          //排序后的输出
         Map<String, Integer> sortMaps = Sorter.sort(maps);
         Set sortSet = sortMaps.entrySet();
         Iterator ii = sortSet.iterator();
         while (ii.hasNext()){
             Map.Entry<String, Integer> entry1=(Map.Entry<String, Integer>)ii.next();
             System.out.println(entry1.getKey() +  "-------->"  + entry1.getValue());
         }
         
     }
}


排序前的输出结果是:
cat-------->7
apple-------->5
dog-------->1
boy-------->8

排序后的输出结果是:
dog-------->1
cat-------->7
boy-------->8
apple-------->5
经过排序后的Map有序了,是按照字母的逆序排列的。

2、我们再讨论如何按value值进行排序。
还是上面的那个例子,我们想要按照各类对象的数量打印出类别的名称。
我们再来修改一下这个SortHashMap类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public  class  SortHashMap {
     public  SortHashMap() {
     }
     public  static  void  main(String[] args) {
         Map<String, Integer> maps =  new  HashMap<String, Integer>();
         maps.put( "boy" 8 );
         maps.put( "cat" 7 );
         maps.put( "dog" 1 );
         maps.put( "apple" 5 );
         //排序前的输出
         Set set = maps.entrySet();
         Iterator i = set.iterator();
         while (i.hasNext()){
             Map.Entry<String, Integer> entry1=(Map.Entry<String, Integer>)i.next();
             System.out.println(entry1.getKey() +  "-------->"  + entry1.getValue());
         }
         System.out.println( "----------------" );
         //排序后的输出
      List<Map.Entry<String, Integer>> info = 
                 new  ArrayList<Map.Entry<String, Integer>>(maps.entrySet());
         Collections.sort(info,  new  Comparator<Map.Entry<String, Integer>>() {
             public  int  compare(Map.Entry<String, Integer> obj1, 
             Map.Entry<String, Integer> obj2) {
                 return  obj2.getValue() - obj1.getValue();
             }
         });
         for  ( int  j =  0 ; j<info.size();j++) {
             System.out.println(info.get(j).getKey() +  "------->"  + info.get(j).getValue());
         }
     }
}

排序前的输出结果是:
cat-------->7
apple-------->5
dog-------->1
boy-------->8

排序后的输出结果是:
boy------->8
cat------->7
apple------->5
dog------->1

程序运行的结果,达到了我们的要求,实现了Map的排序。该方法主要是利用了ArrayList的排序实现了Map的排序输出,并没有影响到Map的存放结构。


特别说明:尊重作者的劳动成果,转载请注明出处哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp42
相关文章
|
28天前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
30 1
|
2月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
18 0
|
6月前
|
存储 Java API
探讨Java中交换Map的Key和Value值的技术
探讨Java中交换Map的Key和Value值的技术
49 2
|
6月前
|
存储 缓存 Java
Java交换map的key和value值
在Java中,直接交换`Map`的key和value是不允许的,因为key是唯一的且不可变。不过,可以通过创建新`Map`实现交换:将原`Map`的value作为新key,key作为新value。注意,如果原`Map`有重复value或null,需额外处理。以下是一个代码示例,展示了如何在value唯一且非null的情况下交换`Map`的key和value。对于重复value或null值的情况,可以使用`List`存储多个key或忽略null值。在实际应用中,`Map`常用于缓存、配置管理、数据库结果映射等多种场景。
71 1
|
7月前
|
Java API
List转Map(id为key,list为value)
List转Map(id为key,list为value)
266 0
|
6月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
3月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
3月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
4月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
4月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。