`
lijuanabc
  • 浏览: 125743 次
社区版块
存档分类
最新评论

对Map按key和value分别排序

 
阅读更多

一.理论准备

 

        Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。

 

        TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

 

        HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。

 

        Map.Entry返回Collections视图。

 

 

二.key排序

 

        TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>(
                new Comparator<String>() {
                    public int compare(String obj1, String obj2) {
                        // 降序排序
                        return obj2.compareTo(obj1);
                    }
                });
        map.put("b", "ccccc");
        map.put("d", "aaaaa");
        map.put("c", "bbbbb");
        map.put("a", "ddddd");
        
        Set<String> keySet = map.keySet();
        Iterator<String> iter = keySet.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + ":" + map.get(key));
        }
    }
}
        运行结果如下:

d:aaaaa
c:bbbbb
b:ccccc
a:ddddd
 

 

三.value排序

 

        上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较,如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>();
        map.put("a", "ddddd");
        map.put("c", "bbbbb");
        map.put("d", "aaaaa");
        map.put("b", "ccccc");
        
        //这里将map.entrySet()转换成list
        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        //然后通过比较器来实现排序
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
            
        });
        
        for(Map.Entry<String,String> mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
    }
}
        运行结果如下:

d:aaaaa
c:bbbbb
b:ccccc
a:ddddd

 

 

 

四.结束语

 

        那时候学C++的STL的时候就想搞,可是找不到资料,偶然于网上发现,记下了。

2
3
分享到:
评论
1 楼 arthur8 2013-09-22  
看标题还以为怎么对value排序~

相关推荐

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

    当需要对Map中的数据进行排序时,通常有两种情况:按key排序和按value排序。本文将详细介绍如何在Android环境下对Map进行这两种排序。 首先,我们来讨论按key排序。TreeMap是一个基于红黑树实现的Map,它可以根据...

    对Map的key和value进行排序

    对Map的key和value进行排序 对Map的key和value进行排序是Java编程中非常重要的一部分。Map是Java集合框架中的一种数据结构,用于存储键值对。然而,在实际应用中,我们经常需要对Map中的key或value进行排序,以满足...

    对map里面的value进行排序

    然而,有时我们需要对Map中的值进行排序,例如按照value的大小进行升序或降序排列。这篇博客"对map里面的value进行排序"探讨的就是如何实现这一需求。 首先,我们了解Map接口的基本概念。Map接口不直接支持排序,...

    java8 stream 操作map根据key或者value排序的实现

    Java8 Stream 操作 Map 根据 Key 或 Value 排序的实现 Java8 中的 Stream 操作为...今天我们介绍了如何使用 Java8 Stream 操作 Map 根据 Key 或 Value 排序的实现,希望能够对读者有些帮助,也希望大家多多支持我们。

    Java Map按键排序和按值排序

    Java Map按键排序和按值排序 Java Map按键排序和按值排序是Java编程语言中常用的数据结构之一。Map是一种键值对的集合,它可以按照键或值进行排序。下面,我们将详细地介绍Java Map的按键排序和按值排序。 按键...

    JCF(List、Set、Map)学习,实现了<key,value>按value排序噢

    标题中提到的“JCF(List、Set、Map)学习,实现了&lt;key,value&gt;按value排序”是一个关键点,我们将深入探讨这个话题。 首先,让我们了解List、Set和Map的区别。List是有序的集合,允许重复元素,并且可以保持插入顺序...

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

    一种常见做法是先将Map的entrySet转换为List,然后使用`Collections.sort()`方法,传入一个Comparator来按value排序。 - 下面的示例展示了如何实现value排序: ```java List&lt;Map.Entry, String&gt;&gt; list = new ...

    Hashmap 通过对VALUE排序 源代码

    本文将探讨如何通过对VALUE排序HashMap,并分析相关源代码。 HashMap本身并不支持对值的排序,因为它内部使用哈希表实现,主要关注的是键的哈希计算和冲突解决,而不是元素的顺序。如果需要对HashMap的值进行排序,...

    Java基础总结_java初学_java基础

    `对Map按key和value分别排序 - DM张朋飞 - 博客园.htm`可能详细讲解了这些排序方法。 4. **算法:逆波兰表示法** `逆波兰表示法.docx`涉及计算表达式的方法,它使用后缀表达式,通过栈数据结构实现。理解和实现...

    java中对单层json进行key字母排序

    `java中对单层json进行key字母排序`的标题指出了我们需要对一个单层JSONObject的键进行字母升序排序。描述提到这个资源可以直接在程序中使用,意味着提供了一个功能函数来实现这一操作。 在提供的代码中,可以看到...

    Java Map 按值排序

    总结来说,Java提供了多种方式来对Map按值进行排序,包括使用TreeMap、Collections.sort、Stream API以及Guava库。选择哪种方法取决于项目需求和个人喜好,但在Java 8及更高版本中,Stream API通常被认为是最简洁和...

    Java Map 按照Value排序的实现方法

    在Java编程中,Map接口是用于存储键值对的数据结构,常见的实现类包括HashMap、TreeMap、Hashtable和LinkedHashMap等。这些实现类各有特点,但默认并不保证元素的顺序。当我们需要按照Value(值)对Map进行排序时,...

    Go-go有序map用于json输出有序key的对象和后端有序循环map取值

    - 双向链表实现:每个元素(key-value对)都是链表中的节点,插入时维护key的顺序。在遍历时,可以按照链表的顺序访问。 - 数组实现:使用固定大小的数组,通过索引存储key,插入时更新索引并保持顺序。遍历则按...

    Java中对list map根据map某个key值进行排序的方法

    Java中对List&lt;Map&gt;根据Map某个key值进行排序的方法 ...使用 Java 中的 Collections.sort() 方法和 Comparator 接口可以轻松地对 List 集合进行排序,包括根据 Map 中的某个 key 值对 List 集合进行排序。

    map实现按value升序排序

    本文将详细介绍如何实现`Map`按照值(value)升序排序以及按照键(key)排序。 首先,我们需要了解`Map`的基本概念。`Map`接口是Java集合框架的一部分,它定义了键值对的存储和访问方法。常见的`Map`实现有`HashMap...

    Java Map 按Key排序实例代码

    总的来说,Java中对Map的Key进行排序通常有两种方式:一是使用支持排序的Map实现类如TreeMap,二是将HashMap的Key集合转换为List或TreeSet,然后进行排序。通过这种方式,我们可以灵活地根据需求调整Map中元素的顺序...

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

    这里我们将探讨如何在Java中实现按值排序的Map,特别关注“按值排序”这一需求。 首先,标准的SortedMap接口是根据键(key)进行排序的,例如TreeMap就是一种按键升序排序的实现。因此,如果想按值排序,我们需要...

    STL_map初始化和排序

    std::map, int&gt; myMap(keyValuePairs.begin(), keyValuePairs.end()); ``` ### 2. STL Map 的排序 `map`内部自动保持元素的排序,这是因为它的底层实现是红黑树。在`map`中,排序是基于键(key)的比较。默认情况...

Global site tag (gtag.js) - Google Analytics