Java有序Map详解(2种最常用有序Map)

Java有序Map详解(2种最常用有序Map)-mikechen

在Java有序Map在Java开发经常使用到,下面我就重点来详解2种常见的Java有序Map@mikechen

1.LinkedHashMap

LinkedHashMapHashMap的一个子类,它通过双向链表维护了一个插入顺序或者访问顺序的列表。

HashMap和双向链表的密切配合和分工合作造就了LinkedHashMap,如下图所示:

Java有序Map详解(2种最常用有序Map)-mikechen

LinkedHashMap是通过双向链表和散列表这两种数据结构组合实现的,这样在查询的时候就可以通过散列表来操作,遍历的时候通过双向链表来操作。

如果需要维护插入顺序,可以使用LinkedHashMap

示例如下:

Map<String, Integer> map = new LinkedHashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println(key + " -> " + value);
}

 

 

2.TreeMap

TreeMap是基于红黑树实现的有序Map,它会按照键的自然顺序或者自定义的比较器顺序进行排序。

TreeMap底层通过红黑树(Red-Black tree)实现,是一种平衡二叉树,TreeMap数据结构如下图所示:

Java有序Map详解(2种最常用有序Map)-mikechen

如果需要使用自定义的排序方式,可以使用TreeMap。

如下所示:

Map<String, Integer> map = new TreeMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println(key + " -> " + value);
}

输出:

apple -> 1
banana -> 2
orange -> 3

如果使用TreeMap,键的类型必须实现Comparable接口,或者传入一个Comparator比较器。

以上就是Java有序Map的详解,更多Java集合,请查看:Java集合(万字图文全面详解)

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法