在Java有序Map在Java开发经常使用到,下面我就重点来详解2种常见的Java有序Map@mikechen
1.LinkedHashMap
LinkedHashMap是HashMap的一个子类,它通过双向链表维护了一个插入顺序或者访问顺序的列表。
HashMap和双向链表的密切配合和分工合作造就了LinkedHashMap,如下图所示:
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数据结构如下图所示:
如果需要使用自定义的排序方式,可以使用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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》