`

Map sort

阅读更多
可能会遇到这样的情况,我可能要对Map<key,value>的集合进行排序,而这种排序又分为两种情况,你可能按key值排序;另外你也可能会遇到按value值进行排序的情况。

       大家都知道,默认的情况下,TreeMap:是按key升序,进行排序的;LinkedHashMap:是按加入顺序进行排序的;HashMap:内部数值的顺序并不是以存放的先后顺序为主,而是以hash值的顺序为主,其次才是存放的先后顺序。在这里我们只讨论如何实现HashMap的排序。

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

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;
    }
  
}

最后给出一个例子:
public class SortHashMap {

    public SortHashMap() {

    }

    public static void main(String[] args) {
        Map<String, Integer> maps = new HashMap<String, Integer>();
        maps.put("boy",;
        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类:

public class SortHashMap {

    public SortHashMap() {

    }

    public static void main(String[] args) {
        Map<String, Integer> maps = new HashMap<String, Integer>();
        maps.put("boy",;
        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的存放结构。
分享到:
评论

相关推荐

    STL 中的常用的Vector Map Set Sort用法

    本篇文章将详细探讨STL中的四个常用组件:`vector`、`map`、`set`以及排序算法`sort`的用法。 1. `vector`: `vector`是STL中最基本的动态数组,它允许在运行时动态增加或减少元素。`vector`提供了许多便利的方法...

    mapsort:对复杂输入进行性能排序

    mapsort· 对复杂输入进行性能排序。 前言 除非遇到性能问题,否则不需要此库。 mapsort不会添加普通JavaScript中不存在的任何功能。 相反,在以下情况下,它可以极大地提高您的性能: 排序是您的瓶颈,并且 数组...

    浅谈Java之Map 按值排序 (Map sort by value)

    在Java编程中,Map接口表示一组键值对的集合,其中每个键都是唯一的。然而,标准的Map实现如HashMap、TreeMap等,并不支持按值排序。如果你需要一个按值排序的Map,需要采取一些额外的策略。这里我们将探讨如何在...

    STL中的常用的vector,map,set,Sort用法

    根据给定文件的信息,我们可以总结出以下几个...以上就是关于 `vector` 和 `map` 的详细介绍,它们都是 C++ STL 中非常重要的数据结构,对于初学者来说,熟练掌握这些基础知识对于进一步学习 C++ 有着至关重要的作用。

    2013年中国数据库大会-08-百度的下一代离线存储计算系统

    此外,通过优化MapSort过程,百度还实现了IO密集型作业的加速以及简单统计类应用的map过程加速。 在资源调度方面,百度提出了使用idle平台进行统一资源调度的理念,这有助于更高效地利用和分配集群的计算资源。 ...

    Java Map 按值排序

    我们可以将Map转换为List&lt;Map.Entry, V&gt;&gt;,然后使用Collections.sort()方法对List进行排序。这里需要提供一个Comparator,基于值进行比较: ```java Map, Integer&gt; map = new HashMap(); // 添加元素... List&lt;Map....

    对Map按key和value分别排序

    以下代码展示了如何使用 Collections 的 sort 方法实现 Map 按 value 排序: ```java List&lt;Map.Entry, String&gt;&gt; list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator&lt;Map.Entry, String&gt;...

    Java Map按键排序和按值排序

    public Map, String&gt; sortMapByValue(Map, String&gt; oriMap) { Map, String&gt; sortedMap = new LinkedHashMap, String&gt;(); if (oriMap != null && !oriMap.isEmpty()) { List&lt;Map.Entry, String&gt;&gt; entryList = new ...

    java实现的map排序

    Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...

    a java map reduce framework

    MapReduce模型主要由两个主要阶段组成:Map阶段和Reduce阶段,以及一个可选的Shuffle和Sort阶段。Map阶段将输入数据拆分成键值对,并对其进行局部处理;Reduce阶段则对Map阶段的结果进行全局聚合,以生成最终的输出...

    Java 对象属性map排序示例

    Collections.sort(entryList, new Comparator&lt;Map.Entry, String&gt;&gt;() { @Override public int compare(Map.Entry, String&gt; o1, Map.Entry, String&gt; o2) { return o1.getKey().compareTo(o2.getKey()); } }); ```...

    STL_中的常用的Vector_Map_Set_Sort用法

    ### C++ STL 中 Vector, Map, Set 和 Sort 的用法详解 #### 一、Vector (向量) **1. 声明** - `vector&lt;int&gt; a;` —— 声明一个元素类型为 `int` 的 `vector` 对象 `a`,初始时不含任何元素。 - `vector&lt;MyType&gt; a...

    Java Map排序

    实现Map的排序功能,此文档针对Java开发,。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    STL容器 内容全,讲解详细 包括Vector、Deque、sort、set、map等

    本资源包含对STL中多种关键容器的详细讲解,包括Vector、Deque、sort、set、map等,这些都是C++程序员在实际开发中不可或缺的工具。 1. **Vector**:Vector是一个动态数组,它允许在任何位置插入和删除元素。其底层...

    有关map程序框架(不能下载)

    在Map程序框架中,通常会有额外的组件,例如Shuffle和Sort。Shuffle阶段负责重新组织Map阶段产生的中间键值对,确保相同的键被分到同一个Reducer中。Sort则是在Shuffle之后,对每个Reducer的输入进行排序,这通常是...

    map排序.txt

    Collections.sort(list, new Comparator&lt;Map.Entry, V&gt;&gt;() { @Override public int compare(Map.Entry, V&gt; o1, Map.Entry, V&gt; o2) { int compare = (o1.getValue()).compareTo(o2.getValue()); return -compare...

    vector list map pair stl 标准模板库 c++

    - `sort()`和`reverse()`函数可以对`list`进行排序和反转。 - `push_front()`和`pop_front()`分别用于在列表开头添加和移除元素。 3. **map**: - `map`是一种关联容器,其中的元素以键值对形式存储。每个键值对...

    (11)函数:参数、返回值、lambda、reduce、sort、map、filter

    (11)函数:参数、返回值、lambda、reduce、sort、map、filter

    Android sort按时间排序

    本篇将详细讲解如何使用`ListView`显示按时间排序的数据,并通过`Adapter`和`Collections.sort`方法处理Map中的数据。 首先,我们要理解`ListView`的工作原理。`ListView`是一个可以滚动的视图,它通过复用已创建的...

Global site tag (gtag.js) - Google Analytics