欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)HashMap排序方法的示例詳解

 更新時間:2022年05月23日 15:11:28   作者:IT利刃出鞘  
這篇文章主要通過一些示例為大家介紹了Java對HashMap進行排序的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解一下

簡介

本文用示例介紹HashMap排序的方法。

排序已有數(shù)據(jù)

按key排序

使用stream進行排序(按key升序/降序)

package org.example.a;
 
import java.util.*;
 
public class Demo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("ad", "dd");
        map.put("bc", "ee");
        map.put("cb", "ff");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<String, String> linkedHashMap = new LinkedHashMap<>();
        // 默認(rèn)按照升序排列
        map.entrySet().stream().sorted(Map.Entry.comparingByKey())
                .forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));
        for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<String, String> linkedHashMap1 = new LinkedHashMap<>();
        // 自定義排序(降序)
        map.entrySet().stream().sorted(Map.Entry.comparingByKey(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        })).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));
        for (Map.Entry<String, String> entry : linkedHashMap1.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

執(zhí)行結(jié)果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff
 
cb:ff
bc:ee
ad:dd

HashMap轉(zhuǎn)TreeMap自定義排序(按key升序/降序)

package org.example.a;
 
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
 
public class Demo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("ad", "dd");
        map.put("bc", "ee");
        map.put("cb", "ff");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
        // 默認(rèn)按照升序排序
        Map<String, String> map1 = new TreeMap<>();
        map.forEach(map1::put);
        for (Map.Entry<String, String> entry : map1.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        // 自定義排序(降序)
        Map<String, String> map2 = new TreeMap<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });
        map.forEach(map2::put);
        for (Map.Entry<String, String> entry : map2.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

執(zhí)行結(jié)果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff
 
cb:ff
bc:ee
ad:dd

按value排序

使用stream進行排序(按value升序/降序)

package org.example.a;
 
import java.util.*;
 
public class Demo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("ad", "dd");
        map.put("bc", "ee");
        map.put("cb", "ff");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<String, String> linkedHashMap = new LinkedHashMap<>();
        // 默認(rèn)按照升序排列
        map.entrySet().stream().sorted(Map.Entry.comparingByValue())
                .forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));
        for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<String, String> linkedHashMap1 = new LinkedHashMap<>();
        // 自定義排序(降序)
        map.entrySet().stream().sorted(Map.Entry.comparingByValue(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        })).forEach(o -> linkedHashMap1.put(o.getKey(), o.getValue()));
        for (Map.Entry<String, String> entry : linkedHashMap1.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

執(zhí)行結(jié)果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff
 
cb:ff
bc:ee
ad:dd

借助List進行排序(按value升序/降序)

原理:將待排序Map中的所有元素置于一個列表中,接著使用Collections的一個靜態(tài)方法 sort(List<T> list, Comparator<? super T> c) 來排序列表,同樣是用比較器定義比較規(guī)則。排序后的列表中的元素再依次裝入Map,為了肯定的保證Map中元素與排序后的List中的元素的順序一致,使用了LinkedHashMap數(shù)據(jù)類型。

本處只寫升序代碼,降序只是調(diào)換個順序而已。

package org.example.a;
 
import java.util.*;
 
public class Demo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("ad", "dd");
        map.put("bc", "ee");
        map.put("cb", "ff");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<String, String> sortedMap = new LinkedHashMap<>();
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(
                map.entrySet());
        Collections.sort(entryList, new Comparator<Map.Entry<String, String>>() {
            @Override
            public int compare(Map.Entry<String, String> me1, Map.Entry<String, String> me2) {
                return me1.getValue().compareTo(me2.getValue());
            }
        });
        for (Map.Entry<String, String> stringStringEntry : entryList) {
            sortedMap.put(stringStringEntry.getKey(), stringStringEntry.getValue());
        }
 
        for (Map.Entry<String, String> entry : sortedMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

運行結(jié)果

bc:ee
ad:dd
cb:ff
 
ad:dd
bc:ee
cb:ff

按插入順序存放

HashMap不按插入順序存放

package org.example.a;
 
import java.util.*;
 
public class Demo{
    public static List arrayList = new ArrayList();
    public static void main(String[] args) {
        Map<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("name1", "josan1");
        hashMap.put("name2", "josan2");
        hashMap.put("name3", "josan3");
        
        Set<Map.Entry<String, String>> set = hashMap.entrySet();
        Iterator<Map.Entry<String, String>> iterator = set.iterator();
        while(iterator.hasNext()) {
            Map.Entry entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            System.out.println("key:" + key + ", value:" + value);
        }
    }
}

執(zhí)行結(jié)果(未按照插入順序輸出)

key:name3, value:josan3
key:name2, value:josan2
key:name1, value:josan1

LinkedHashMap會按照插入順序存放

package org.example.a;
 
import java.util.*;
 
public class Demo{
    public static List arrayList = new ArrayList();
    public static void main(String[] args) {
        Map<String, String> hashMap = new LinkedHashMap<String, String>();
        hashMap.put("name1", "josan1");
        hashMap.put("name2", "josan2");
        hashMap.put("name3", "josan3");
 
        Set<Map.Entry<String, String>> set = hashMap.entrySet();
        Iterator<Map.Entry<String, String>> iterator = set.iterator();
        while(iterator.hasNext()) {
            Map.Entry entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            System.out.println("key:" + key + ", value:" + value);
        }
    }
}

執(zhí)行結(jié)果(按照插入順序輸出)

key:name1, value:josan1
key:name2, value:josan2
key:name3, value:josan3 

以上就是Java實現(xiàn)HashMap排序方法的示例詳解的詳細內(nèi)容,更多關(guān)于Java HashMap排序的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的HashMap內(nèi)存泄漏問題詳解

    Java中的HashMap內(nèi)存泄漏問題詳解

    這篇文章主要介紹了Java中的HashMap內(nèi)存泄漏問題詳解,WeakHashMap中的key是弱引用,如果再使用之后沒有及時remove掉這個key,那么當(dāng)GC時key就可能會被回收,導(dǎo)致key對應(yīng)的value對象占用的內(nèi)存無法回收進而導(dǎo)致內(nèi)存泄漏,需要的朋友可以參考下
    2023-09-09
  • 多個sheet Excel 數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的實現(xiàn)方法

    多個sheet Excel 數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的實現(xiàn)方法

    這篇文章主要介紹了多個sheet Excel 數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 一篇文章告訴你如何在Java數(shù)組中插入一個字符

    一篇文章告訴你如何在Java數(shù)組中插入一個字符

    本篇文章主要介紹了Java數(shù)組中插入一個字符的相關(guān)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-10-10
  • Java編程中的性能優(yōu)化如何實現(xiàn)

    Java編程中的性能優(yōu)化如何實現(xiàn)

    這篇文章主要介紹了Java編程中的性能優(yōu)化如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot整合FastJson過程解析

    SpringBoot整合FastJson過程解析

    這篇文章主要介紹了SpringBoot整合FastJson過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 在Java項目中實現(xiàn)日志輸出的技巧分享

    在Java項目中實現(xiàn)日志輸出的技巧分享

    日志是開發(fā)過程中不可或缺的一部分,它可以幫助我們追蹤代碼的執(zhí)行過程、排查問題以及監(jiān)控系統(tǒng)運行狀況,然而,大多數(shù)開發(fā)人員在編寫日志時往往只關(guān)注于輸出必要的信息,而忽略了日志的可讀性和美觀性,本文將介紹如何在Java項目中實現(xiàn)漂亮的日志輸出
    2023-10-10
  • Spring Security實現(xiàn)不同接口安全策略方法詳解

    Spring Security實現(xiàn)不同接口安全策略方法詳解

    這篇文章主要介紹了Spring Security實現(xiàn)不同接口安全策略方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • jmeter正則表達式提取器的用法與正則詳解

    jmeter正則表達式提取器的用法與正則詳解

    在使用Jmeter過程中,會經(jīng)常使用到正則表達式提取器提取器,下面這篇文章主要給大家介紹了關(guān)于jmeter正則表達式提取器的用法與正則的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • @RequestParam?和@RequestBody注解的區(qū)別解析

    @RequestParam?和@RequestBody注解的區(qū)別解析

    在 Spring MVC 中,我們可以使用 @RequestParam 和 @RequestBody 來獲取請求參數(shù),但它們在用法和作用上有一些區(qū)別,這篇文章主要介紹了@RequestParam?和@RequestBody注解的區(qū)別,需要的朋友可以參考下
    2023-06-06
  • SpringCloud使用Feign實現(xiàn)動態(tài)路由操作

    SpringCloud使用Feign實現(xiàn)動態(tài)路由操作

    這篇文章主要介紹了SpringCloud使用Feign實現(xiàn)動態(tài)路由操作,文章圍繞主題展開詳細的內(nèi)容介紹具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06

最新評論