java 有序Map之TreeMap的使用 您所在的位置:网站首页 map怎么有序 java 有序Map之TreeMap的使用

java 有序Map之TreeMap的使用

2024-04-20 15:24| 来源: 网络整理| 查看: 265

谦虚使人进步

想要了解一个类,就可以从它实现的接口和继承的父类开始。我们可以看到TreeMap实现了java.util.NavigableMap接口,NavigableMap它又继承了排序Map接口 java.util.SortedMap,因此TreeMap具有排序能力;其次,TreeMap实现了Cloneable和Serializable接口,它也具备克隆和序列化能力

image.png

TreeMap底层由红黑树实现,按照Key的自然顺序升序或者实现Comprator接口进行自定义排序。且TreeMap的排序特性只作用在key上。如果需要value也跟着排序就需要使用一些别的手段。

排序特性 按key排序

默认按key升序排列

package com.springboot.study.demo1; import java.util.*; public class Test { public static void main(String[] args) { TreeMap treeMap = new TreeMap() {{ put("3", "1"); put("1", "3"); put("2", "2"); }}; for (String s : treeMap.keySet()) { System.out.println(s+"==>"+treeMap.get(s)); } } } image.png

按key降序排列

package com.springboot.study.demo1; import java.util.*; public class Test { public static void main(String[] args) { TreeMap treeMap = new TreeMap(new Comparator() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }) {{ put("3", "1"); put("1", "2"); put("2", "3"); }}; for (String s : treeMap.keySet()) { System.out.println(s + "==>" + treeMap.get(s)); } } } image.png 按value排序

如果需要value也跟着排序就需要使用一些别的手段。当然HashMap的value排序也可以使用这种方法

将Map转为 List,然后使用java.util.Collections工具类来排序。当然这种方法也适用于HashMap

package com.springboot.study.demo1; import java.util.*; import java.util.stream.Collectors; public class Test { public static void main(String[] args) { Map treeMap = new HashMap() {{ put("3", "1"); put("1", "2"); put("2", "3"); }}; //将Map转为 List List list = new ArrayList(treeMap.entrySet()); //按照 Collections.sort(list,new Comparator() { //升序排序 public int compare(Map.Entry o1, Map.Entry o2) { return o1.getValue().compareTo(o2.getValue()); } }); for (Map.Entry e: list) { System.out.println(e.getKey()+"==>"+e.getValue()); } } } image.png 性能特性

TreeMap的优势在于能够实现自定义排序功能,但是性能要比HashMap和LinkedHashMap差。它的 containsKey 、get 、 put 、remove 方法的时间复杂度是 log(n)

虽然LinkedHashMap也是有序的,但是LinkedHashMap内元素顺序只和插入顺序有关,无法进行自定义排序



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有