温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java如何实现HashMap排序

发布时间:2022-05-23 17:15:48 阅读:376 作者:iii 栏目:开发技术
Java开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要介绍了Java如何实现HashMap排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java如何实现HashMap排序文章都会有所收获,下面我们一起来看看吧。

排序已有数据

按key排序

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

package org.example.a;
 
import java.util.*;
 
public class Demo {
    public static void main(String[] args) {
        Map<StringString> map = new HashMap<>();
        map.put("ad""dd");
        map.put("bc""ee");
        map.put("cb""ff");
        for (Map.Entry<StringString> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<StringString> linkedHashMap = new LinkedHashMap<>();
        // 默认按照升序排列
        map.entrySet().stream().sorted(Map.Entry.comparingByKey())
                .forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));
        for (Map.Entry<StringString> entry : linkedHashMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<StringString> 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<StringString> entry : linkedHashMap1.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

执行结果

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

HashMap转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<StringString> map = new HashMap<>();
        map.put("ad""dd");
        map.put("bc""ee");
        map.put("cb""ff");
        for (Map.Entry<StringString> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
        // 默认按照升序排序
        Map<StringString> map1 = new TreeMap<>();
        map.forEach(map1::put);
        for (Map.Entry<StringString> entry : map1.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        // 自定义排序(降序)
        Map<StringString> 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<StringString> entry : map2.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

执行结果

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<StringString> map = new HashMap<>();
        map.put("ad""dd");
        map.put("bc""ee");
        map.put("cb""ff");
        for (Map.Entry<StringString> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<StringString> linkedHashMap = new LinkedHashMap<>();
        // 默认按照升序排列
        map.entrySet().stream().sorted(Map.Entry.comparingByValue())
                .forEach(o -> linkedHashMap.put(o.getKey(), o.getValue()));
        for (Map.Entry<StringString> entry : linkedHashMap.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();
 
        Map<StringString> 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<StringString> entry : linkedHashMap1.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }
}

执行结果

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

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

原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List<T> list, Comparator<? super T> c) 来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

本处只写升序代码,降序只是调换个顺序而已。

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

运行结果

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<StringString> hashMap = new HashMap<StringString>();
        hashMap.put("name1""josan1");
        hashMap.put("name2""josan2");
        hashMap.put("name3""josan3");
        
        Set<Map.Entry<StringString>> set = hashMap.entrySet();
        Iterator<Map.Entry<StringString>> 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);
        }
    }
}

执行结果(未按照插入顺序输出)

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<StringString> hashMap = new LinkedHashMap<StringString>();
        hashMap.put("name1""josan1");
        hashMap.put("name2""josan2");
        hashMap.put("name3""josan3");
 
        Set<Map.Entry<StringString>> set = hashMap.entrySet();
        Iterator<Map.Entry<StringString>> 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);
        }
    }
}

执行结果(按照插入顺序输出)

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

关于“Java如何实现HashMap排序”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java如何实现HashMap排序”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×