java中treemap排序_hashmap如何实现有序

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

谦虚使人进步

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

3e44614c8876

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));

}

}

}

3e44614c8876

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));

}

}

}

3e44614c8876

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());

}

}

}

3e44614c8876

image.png

性能特性

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190075.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java工程师简历项目经验怎么写_高级java开发工程师简历

    java工程师简历项目经验怎么写_高级java开发工程师简历开头在找工作的过程中,对于Redis技术知识的掌握已经成为必须的技能。美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了…redis了解吗?你说说怎么用redis实现分布式锁?Redis常用数据结构及底层数据结构实现如何解决Redis的并发竞争Key问题如何保证缓存与数据库双写时的数据一致性?剩下的不太记得了…为此面试完回来针Redis专门做了一个面试问题大总结架构筑基大家都知道,性能一直

    2025年6月1日
    3
  • 治疗治愈埃博拉病毒(非科幻)

    治疗治愈埃博拉病毒(非科幻)

    2022年1月2日
    66
  • murmurhash算法_自我介绍的方式

    murmurhash算法_自我介绍的方式加密哈希和非加密哈希-MM是非加密哈希首先了解下加密哈希和非加密哈希,加密哈希函数旨在保证安全性,很难找到碰撞。即:给定的散列h很难找到的消息m;很难找到产生相同的哈希值的消息m1和m2。非加密哈希函数只是试图避免非恶意输入的冲突。作为较弱担保的交换,它们通常更快。如果数据量小,或者不太在意哈希碰撞的频率,甚至可以选择生成哈希值小的哈希算法,占用更小的空间。Smhasher-评价哈希算法的…

    2022年10月9日
    2
  • Extjs grid设置单元格字体颜色,及单元格背景色「建议收藏」

    Extjs grid设置单元格字体颜色,及单元格背景色「建议收藏」转自:http://blog.csdn.net/suixufeng/article/details/7480170上面这种是最简单的,设定固定的某单元格中字体颜色。[javascript]viewplaincopy//————————————————–列头    var cm = new

    2022年7月11日
    21
  • postman接口自动化测试实战_apipost接口测试

    postman接口自动化测试实战_apipost接口测试Apifox介绍Apifox是API文档、API调试、APIMock、API自动化测试一体化协作平台,定位Postman+Swagger+Mock+JMeter。通过一套系

    2022年7月29日
    6
  • ASP.NET使用AJAX应注意IIS有没有.ashx扩展

    ASP.NET使用AJAX应注意IIS有没有.ashx扩展

    2021年11月17日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号