`

Java Map 按key排序和按Value排序

 
阅读更多

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

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

TreeMap: 基于红黑树(Red-Black tree)的 NavigableMap 实现,能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器。TreeMap不允许key的值为null。非同步的。

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

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

 

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。
根据key来排序:

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("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "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));
        }
    }
}

 

根据TreeMap的value来进行排序原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort来排序。

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

 

HashMap的值是没有顺序的,他是按照key的HashCode来实现的。对于这个无序的HashMap可以参照TreeMap的value排序来实现。

public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");

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

 

http://www.jb51.net/article/44015.htm

分享到:
评论

相关推荐

    对Map按key和value分别排序

    摘要:本文主要介绍了 Map 按 key 和 value 分别排序的方法,包括使用 TreeMap 的 key 排序和 value 排序两种方式。 Map 按 key 排序 Map 是键值对的集合接口,它的实现类主要包括 HashMap、TreeMap、Hashtable 及...

    对Map的key和value进行排序

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

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

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

    Java Map按键排序和按值排序

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

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

    Java8 Stream 操作 Map 根据 Key 或 Value 排序的实现 Java8 中的 Stream 操作为开发者提供了简洁高效的数据处理方式,今天我们将介绍如何使用 Java8 Stream 操作 Map 根据 Key 或 Value 排序的实现。 Map 根据 ...

    Java Map 按值排序

    本文将详细介绍如何在Java中实现Map按值排序的几种方法。 1. 使用TreeMap TreeMap是Java中实现Map接口的一个类,它内部使用红黑树数据结构,可以按照键或值自然排序。如果我们要根据值排序,可以在创建TreeMap时...

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

    在提供的代码中,可以看到一个名为`getSortJson`的方法,它接受一个JSONObject作为参数,并返回一个新的按key排序后的JSONObject。这个方法的具体步骤如下: 1. 使用`Iterator&lt;String&gt; iteratorKeys = json.keys();...

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

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

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

    以下是关于Java Map按照Value排序的实现方法的详细说明: 1. **HashMap**: - HashMap是基于哈希表实现的,它不保证元素的顺序,插入顺序和遍历顺序可能不同,而且不支持排序。 2. **TreeMap**: - TreeMap基于...

    Java Map 按Key排序实例代码

    本篇文章将深入讲解如何在Java中实现Map按Key排序,并通过一个具体的实例代码进行演示。 首先,我们要了解Java中支持按Key排序的Map实现类:TreeMap。TreeMap内部基于红黑树数据结构,能够保证Map的Key按照自然顺序...

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

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

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

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

    对map里面的value进行排序

    Map接口不直接支持排序,但是Java提供了一些实现了SortedMap接口的类,如TreeMap,它会按照键(Key)的自然顺序或者自定义比较器(Comparator)进行排序。但是,对于已经创建的HashMap或其他非排序Map,我们不能直接...

    对于java map类排序

    然而,有时候我们可能需要对Map按照键(key)或者值(value)进行排序。这里,我们讨论的是“对于Java Map类排序”,特别是通过键进行排序。 在给定的代码中,有一个名为`mapSortByKey`的方法,该方法接收一个未...

    java map 集合 排序

    本文将深入探讨Java Map集合的排序方法。 一、TreeMap:自动排序 1. **TreeMap** 是一个基于红黑树实现的Map,它会自动根据键的自然顺序或自定义比较器进行排序。例如: ```java import java.util.TreeMap; ...

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

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

    Hashmap 通过对VALUE排序 源代码

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

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    循环结束后,`StringBuilder`包含了所有按字典顺序排列的键值对,以`key=value`的形式。返回这个字符串,就可以在其他地方使用,如计算签名、构造URL等。 5. **应用场景**: - **创建HTTP请求签名**:在许多API...

    Java Map 集合类简介

    在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别是ArrayList,基于动态数组...

    java Map 遍历方法

    `TreeMap`按照键的自然顺序排序,因此在遍历时会自动按顺序输出。 ```java TreeMap, Object&gt; treeMap = new TreeMap(); treeMap.put(1, 1); treeMap.put(2, 2); treeMap.put(3, 3); treeMap.put(4, 4); ...

Global site tag (gtag.js) - Google Analytics