欢迎关注公众号 《小姐姐味道》 ,一起进步!

# HashMap如何根据Key的自然排序输出?Value呢?

死磕面试系列。

标签:【入门】【Java】

# 问题

HashMap如何根据Key的自然排序输出?Value呢?

# 意图

为什么会有这么简单的问题?

在平常的面试中,我发现,确实有很大一部分同学答不上来。这是缺乏实践经验和联想能力,只能说sorry了

此题用来检测是否能够灵活应用Java的API。如果这道题都答不出来,那面试可想而知。

# 方式1

第一种方式,使用stream流。其实很乱的代码。

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class HashX {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap(){{
            put("2","b");
            put("3","c");
            put("1","a");
            put("4","d");
        }};

        Map<String,String> linkedHashMap = new LinkedHashMap<>(map);

        map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByKey())
                //.sorted() //java.util.HashMap$Node cannot be cast to java.lang.Comparable
                .forEachOrdered(e->linkedHashMap.put(e.getKey(),e.getValue()));

        for(Map.Entry<String, String> e : linkedHashMap.entrySet()){
            System.out.println(e.getKey() + ", " + e.getValue());
        }
    }
}

# 方式2

更简洁的思路,使用TreeMap转换一下即可。

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class HashX {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap(){{
            put("2","b");
            put("3","c");
            put("1","a");
            put("4","d");
        }};

        Map<String,String> treeMap = new TreeMap(map);
        for(Map.Entry<String, String> e : treeMap.entrySet()){
            System.out.println(e.getKey() + ", " + e.getValue());
        }
    }
}

# 方式3

使用list等结构缓存。

import java.util.HashMap;
import java.util.Map;

public class HashX {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap() {{
            put("2", "b");
            put("3", "c");
            put("1", "a");
            put("4", "d");
        }};

        map.keySet().stream().sorted().forEach(
                k -> System.out.println(k + ", " + map.get(k))
        );
    }
}

# 方式4

根据value排序更有意思一些,可以直接使用lambda的sorted方法

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class HashX {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap() {{
            put("2", "b");
            put("3", "c");
            put("1", "a");
            put("4", "d");
            put("5", null);
        }};

        map.entrySet().stream().sorted((o1, o2) -> {
            if (Objects.isNull(o1.getValue())) {
                return -1;
            }
            return o1.getValue().compareTo(o2.getValue());
        }).forEach(e -> System.out.println(e.getKey() + ", " + e.getValue()));
    }
}

茴香豆的n种写法,但假如你一种都不会,那问题才算大。

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,​进一步交流。​

http://xjjdog.cn 对200+原创文章进行了细致的分类,阅读更流畅,欢迎收藏。


关注回复 技术 关键字 ,即可 获取 海量资源

鲁ICP备2020043359号-1