TreeMap、HashMap 和 LinkedHashMap 的区别

TreeMap、HashMap 和 LinkedHashMap 的区别

  • 1、HashMap
  • 2、LinkedHashMap
  • 3、TreeMap
  • 4、总结


💖The Begin💖点点关注,收藏不迷路💖

在 Java 中,TreeMapHashMapLinkedHashMap 是三种常用的集合类,它们在存储和访问数据的方式上有着显著的区别。本文将详细介绍它们之间的差异及各自的特点。

1、HashMap

HashMap 是一种基于哈希表的集合类。它提供了非常快速的插入、删除和查找操作。

  • 无序性HashMap 不保证元素的顺序,即存入的顺序和取出的顺序可能不一致。
  • 键值允许为 nullHashMap 最多只允许一条记录的键为 null,但允许多条记录的值为 null
  • 非线程安全HashMap 不是线程安全的,如果在多线程环境下使用,需要通过外部同步机制来保证其线程安全。

示例代码:

Map<String, Integer> hashMap = new HashMap<>();hashMap.put("One", 1);hashMap.put("Two", 2);hashMap.put("Three", 3);System.out.println(hashMap); // 输出顺序不一定

2、LinkedHashMap

LinkedHashMapHashMap 的一个子类,它在 HashMap 的基础上,通过维护一个双向链表来保证元素的顺序。

  • 有序性LinkedHashMap 能够保证插入顺序,即存入的顺序和取出的顺序一致。
  • 键值允许为 null:与 HashMap 类似,LinkedHashMap 也允许键和值为 null
  • 非线程安全:同样地,LinkedHashMap 也不是线程安全的。

示例代码:

import java.util.LinkedHashMap;
import java.util.Map;public class LinkedHashMapExample {public static void main(String[] args) {Map<String, Integer> linkedHashMap = new LinkedHashMap<>();linkedHashMap.put("One", 1);linkedHashMap.put("Two", 2);linkedHashMap.put("Three", 3);System.out.println(linkedHashMap); // 按插入顺序输出}
}

3、TreeMap

TreeMap 是一种基于红黑树的集合类,实现了 SortedMap 接口。

  • 排序性TreeMap 能够对保存的记录根据键进行排序,默认是按键值的升序排序,也可以指定排序的比较器。
  • 键值不允许为 null:在 TreeMap 中,键不能为 null,否则会抛出 NullPointerException
  • 非线程安全TreeMap 也不是线程安全的,需要通过外部同步机制来保证其线程安全。

示例代码:

import java.util.Map;
import java.util.TreeMap;public class TreeMapExample {public static void main(String[] args) {Map<String, Integer> treeMap = new TreeMap<>();treeMap.put("One", 1);treeMap.put("Two", 2);treeMap.put("Three", 3);System.out.println(treeMap); // 按键的自然顺序(升序)输出}
}

4、总结

特性HashMapLinkedHashMapTreeMap
有序性无序按插入顺序按键排序
键是否可为 null允许允许不允许
值是否可为 null允许允许允许
线程安全性
内部实现哈希表哈希表 + 双向链表红黑树

通过了解 TreeMap、HashMap 和 LinkedHashMap 的区别,我们可以根据不同的需求选择合适的集合类。

1、在需要快速访问的情况下,可以选择 HashMap;

2、在需要保持插入顺序的情况下,可以选择 LinkedHashMap;

3、而在需要排序的情况下,则应该选择 TreeMap。
在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/369883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01 Web基础与HTTP协议

1、域名和DNS 1.1 域名的概念 如果说一个主机&#xff0c;没有名字也可以完全用IP来代替&#xff0c;但是IP地址不好记忆。例如说&#xff0c;我们记一些网站的名称百度、新浪、搜狐等很好记&#xff0c;但是如果要去记百度的IP、新浪的IP、以及搜狐的IP地址&#xff0c;那将会…

LeetCode题练习与总结:排序链表--148

一、题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&am…

iptables与firewalld

iptables Linux上常用的防火墙软件 1、 防火墙的策略 防火墙策略一般分为两种&#xff0c;一种叫通策略&#xff0c;一种叫堵策略&#xff0c;通策略&#xff0c;默认门是关着的&#xff0c;必须要定义谁能进。堵策略则是&#xff0c;大门是洞开的&#xff0c;但是你必须有身…

leetcode力扣_贪心思想

455.分发饼干&#xff08;easy-自己想得出来并写好&#xff09; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺…

无人机便携式侦测干扰设备(定全向)技术详解

无人机便携式侦测干扰设备&#xff08;定全向&#xff09;是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式&#xff0c;能够覆盖较宽的频率范围&#xff0c;有效侦测并干扰无人机与遥控器之间的通信信号&#xff0c;从而达到控制或驱离无人机的目的。…

小酌消烦暑|人间正清欢

小暑是二十四节气之第十一个节气。暑&#xff0c;是炎热的意思&#xff0c;小暑为小热&#xff0c;还不十分热。小暑虽不是一年中最炎热的时节&#xff0c;但紧接着就是一年中最热的节气大暑&#xff0c;民间有"小暑大暑&#xff0c;上蒸下煮"之说。中国多地自小暑起…

Qt 基础组件速学 鼠标和键盘事件

学习目标&#xff1a; 鼠标事件和键盘事件应用 前置环境 运行环境:qt creator 4.12 学习内容和效果演示&#xff1a; 1.鼠标事件 根据鼠标的坐标位置&#xff0c;做出对应的事件。 2.键盘事件 根据键盘的输入做出对应操作 详细主要代码 1.鼠标事件 #include "main…

MySQL 8.0新特性INTERSECT和EXCEPT用于集合运算

MySQL8.0.31 新版本的推出&#xff0c;MySQL增加了对SQL标准INTERSECT和EXCEPT运算符的支持。 1、INTERSECT INTERSECT输出多个SELECT语句查询结果中的共有行。INTERSECT运算符是ANSI/ISO SQL标准的一部分(ISO/IEC 9075-2:2016(E))。 我们运行两个查询&#xff0c;第一个会列…

windows启动Docker闪退Docker desktop stopped

Windows启动Docker闪退-Docker desktop stopped 电脑上很早就安装有Docker了&#xff0c;但是有一段时间都没有启动了&#xff0c;今天想启动启动不起来了&#xff0c;打开没几秒就闪退&#xff0c;记录一下解决方案。仅供参考 首先&#xff0c;参照其他解决方案&#xff0c;本…

【Python系列】数字的bool值

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

JAVA每日作业day7.4

ok了家人们今天学习了Date类和simpleDateformat类&#xff0c;话不多说我们一起看看吧 一.Date类 类 java.util.Date 表示特定的瞬间 ( 日期和时间 ) &#xff0c;精确到毫秒。 1.2 Date类的构造方法 public Date(): 用来创建当前系统时间对应的日期对象。 public Date(long …

Linux系统(CentOS)安装iptables防火墙

1&#xff0c;先检查是否安装了iptables 检查安装文件-执行命令&#xff1a;rpm -qa|grep iptables 检查安装文件-执行命令&#xff1a;service iptables status 2&#xff0c;如果安装了就卸装(iptables-1.4.21-35.el7.x86_64 是上面命令查出来的版本) 执行命令&#xff1a…

【高性能服务器】多进程并发模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 对于常见的C/S模型…

spark on k8s两种方式的原理与对比

spark on k8s两种方式的原理与对比 1、spark on k8s 方式 spark-submit可以直接用来向 Kubernetes 集群提交 Spark 应用&#xff0c;提交机制如下&#xff1a; 1、Spark 创建一个在Kubernetes pod中运行的 Spark 驱动程序。 2、驱动程序创建在 Kubernetes Pod 中运行的执行器…

JAVA基础知识(上)

# 一、说说&和&&的区别? 作为运算符&#xff1a;& 将二进制的每一位进行与运算 作为逻辑运算符&#xff1a;两者都是与&#xff0c;&& 如果左边为假则终止右边运算&#xff0c;即短路运算。& 则需要把两边的比较执行完 # 二、int和Integer的区…

智慧校园-资产管理系统总体概述

智慧校园资产管理系统是面向教育机构设计的一体化数字平台&#xff0c;其核心目标在于通过先进的信息技术手段&#xff0c;全面优化校园内部的资产管理流程。该系统致力于提升资产管理的效率与透明度&#xff0c;同时降低成本并确保所有操作符合财务及审计规范&#xff0c;为校…

springboot基于Java的超市进销存系统+ LW+ PPT+源码+讲解

第三章系统分析与设计 3.1 可行性分析 一个完整的系统&#xff0c;可行性分析是必须要有的&#xff0c;因为他关系到系统生存问题&#xff0c;对开发的意义进行分析&#xff0c;能否通过本网站来补充线下超市进销存管理模式中的缺限&#xff0c;去解决其中的不足等&#xff0c…

Cesium 二三维热力图

Cesium 二三维热力图 原理&#xff1a;主要依靠heatmap.js包来实现 效果图&#xff1a;

Vue 前端修改页面标题无需重新打包即可生效

在public文件夹下创建config.js文件 index.html页面修改 其他页面的标题都可以用window.title来引用就可以了&#xff01;

Java项目:基于SSM框架实现的校园快递代取管理系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的校园快递代取管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…