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

时间: 2024-10-30 03:32:36

Map 按key和value 排序的相关文章

Java Map 按key排序和按Value排序的实现方法_java

一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeM

Android 对Map按key和value分别排序的实例_Android

一. 理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照Tree

对Map按key和value分别排序

一.理论准备         Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.         TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法.         HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的Ha

Android 对Map按key和value分别排序的实例

一. 理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照Tree

map实现按value升序排序_java

复制代码 代码如下:  /**     * @param h     * @return     * 实现对map按照value升序排序     */    @SuppressWarnings("unchecked")    public static Map.Entry[] getSortedHashtableByValue(Map h) {        Set set = h.entrySet();        Map.Entry[] entries = (Map.Entry[

android map如何获得Google Map API key

首先要做的是获取一个MD5 key(当然,他是通过JDK的keytool工具(keytool.exe)实现的) 1.在这里,主要有两方面的工作 keytool.debug.keystore 2.首先,找到debug.keystore!(进入Eclipse开发环境,然后选择Window-->Preferences-->Android-->Build,这时候我们可以看到界面中的Default debug keystore,它后面方框中的内容就是debug.keystore的路径).在此,我们

javascript 对象数组根据对象object key的值排序

 本文仅仅是实现了javascript 对象数组根据对象object key的值排序,算是对自己学习javascript这么久的一个小结,希望大家能够喜欢     有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义:   代码如下: function keysrt(key,desc) { return function(a,b){ return

map中 key,value 对换 ,互换,

当查询一些数据需要去重复的时候,有很多人想到用map自带的属性去重,因为不允许有相同的key存在,但是可以允许有相同的value存在. 例如:我想得到 手机通讯录 中所有的电话号码和姓名(是去重后的手机号码,不存在相同的两个电话号码) 一部手机里面有    我的电话:152****5398    (2个)         姓名 1      :李白白                   姓名 2  :李黑黑   你的电话:188****8888  (1个)         姓名 1      

申请google android map api key

申请google android map api key 网上找到的老外的一篇申请android map api key的文章.原文连接在这里.  文章内容如下: The Maps API Key   The MapView class in the Maps external library lets you integrate Google Maps into your application. BecauseMapView gives you access to Google Maps d