【 java 集合】Map 接口常用实现类对比

news2024/11/25 4:38:23

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
  • 📝 个人主页:馆主阿牛🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:java 小白到高手的蜕变🍁
  • 💬格言:要成为光,因为有怕黑的人!🔥
    请添加图片描述

目录

    • 📋 个人简介
  • 前言
    • Map概述
      • HashMap
      • LinkedHashMap
      • TreeMap
      • Hashtable
      • Properties
  • 结语

前言

这一节总结一下Map接口的常用实现类,大概写一写案例,下一节我们就分析HashMap的源码!

Map概述

在之前的java集合概述博文中对于Map体系有一张图很清晰:
在这里插入图片描述
Map存储双列数据,存储key-value对的数据,相当于python里的字典,javascript中的对象。

Map接口的实现类有HashMap、TreeMap、Hashtable以及LinkedHashMap和Properties。

下面我们就来对比一下他们的区别!

HashMap

作为 Map 的主要实现类;线程不安全的,效率高;可以存储 null 的 key 和 value 。

public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put(123,null);
        map.put(null,null);
        System.out.println(map);
    }

在这里插入图片描述

LinkedHashMap

HashMap的子类,保证在遍所 map 元素时,可以按照添加的顺序实现遍历。
原因:在原有的 HashMap 底层结构基础上,加了一对指针,指向前一个和后一个元素。
对于频繁的遍历操作,此类执行效率高于 HashMap 。

public static void main(String[] args) {
        Map map = new LinkedHashMap();
        map.put(123,null);
        map.put(null,null);
        map.put("aniu",666);
        System.out.println(map);
    }

在这里插入图片描述
可以看到是按照添加顺序输出的!

TreeMap

保证按照添加的 key - value 对进行排序,实现排序遍历,此时考虑 key 的自然排序或定制排序,要求key必须是同一数据类型或者同一个类创建的对象。底层使用红黑树!

public static void main(String[] args) {
        Map map = new TreeMap();
        map.put(123,null);
        map.put(12,null);
        map.put(54,666);
        map.put(1,666);
        System.out.println(map);
    }

在这里插入图片描述
可以看到是按照key的顺序从小到大输出!
对于自定义类作为key的自然排序和定制排序我不再总结!

Hashtable

Hashtable :作为Map古老的实现类(jdk1.0时Hashtable就出现了,而Map接口才是jdk1.2时才出现的);线程安全的,效率低;不能存储 null 的 key 和 value 。

public static void main(String[] args) {
        Map map = new Hashtable();
        map.put(123,null);
        map.put(null,null);
        System.out.println(map);
    }

在这里插入图片描述
可以看到,确实不能存储null 的 key 和 value 。

Properties

是Hashtable的子类,常用来处理配置文件。 由于属性文件里的key 和 value 都是 String 类型,所以Properties里的key和value都是字符串类型!
另外,存取数据时,建议使用setProperty(String key,String value)方法和getProperty(String key)方法!
这里举个例子,我们操作数据库时,要把一些账户密码放在配置文件中,我们需要把这个配值信息读取!
在这里插入图片描述
上面方式可以快速在idea中创建properties文件!

在这里插入图片描述

public static void main(String[] args) throws Exception {
        Properties pros = new Properties();
        FileInputStream fis = new FileInputStream("jdbc.properties");
        pros.load(fis); // 加载流对应的文件
        String name = pros.getProperty("name");
        String password = pros.getProperty("password");
        System.out.println("name = " + name + ",password = " + password);
        fis.close();
    }

在这里插入图片描述
可以看到配置文件读取成功!

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P9 PyTorch 导数,偏微分,梯度

参考: 多元函数的偏导数、方向导数、梯度以及微分之间的关系思考 - 知乎 关于梯度下降与Momentum通俗易懂的解释_ssswill的博客-CSDN博客_有momentum之后还要梯度剪裁吗 前言: 这里简单了解一下 导数 梯度 微分的概念。 在前面矩阵求导术里面介绍过 梯…

表格控件DHTMLX Spreadsheet 5.0版本重大更新,新增搜索和过滤数据、合并单元格、自动宽度功能

DHTMLX Spreadsheet是用纯JavaScript编写的开源电子表格小部件,可让您快速在网页上添加类似于Excel的可编辑数据表。高度可定制的JavaScript电子表格组件,具有优雅的Material样式,可安全、方便地编辑和格式化数据。本文给大家讲解DHTMLX Gant…

4种大文件传输工具和软件,用于共享大文件

无论是个人还是与团队一起工作,大文件传输软件和网站都能协助提高工作效率、有效地管理工作内容。疫情原因有时我们不得不居家办公,在这种情况下可以分享文件的工具就显得尤为重要。 每个公司都需要一个文件传输软件,让员工可以上传和分享他…

【华为机试真题详解】不含 101 的数(二)【2022 Q4 | 100分】

文章目录 前言题目解析参考代码前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过…

Docker 从入门到精通

目录 一、安装Docker 1. 安装必要的包 2. 设置镜像的仓库 3. 更新软件包的索引 4. 安装docker 5. 启动docker 6. 测试 hello-world 7. 查看的hello-world镜像 8. 卸载docker 9. 配置阿里云镜像加速 二、Docker 常用命令 镜像命令 (1)docker …

4.2 集成运放中的电流源电路

集成运放电路中的晶体管和场效应管,除了作为放大管外,还构成电流源电路,为各级提供合适的静态电流;或作为有源负载取代高阻值的电阻,从而提高放大电路的放大能力。 一、基本电流源电路 1、镜像电流源 图4.2.1所示为…

SAP FICO 内部订单解析

内部订单提供成本控制和短期的工作与任务的监测。内部订单通常被用于内部工作和任务的计划、信息收集和成本清算等等,如市场营销活动和工作修复等。成本中心用于长期成本管理,而内部订单则用于中短期的成本征收。整个订单生命周期过程(从订单…

mysqldump命令备份数据库数据

#MySQLdump常用 mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql备份全部数据库的数据和结构mysqldump -u root -hlocalhost -p123456 -A > /data/mysqlDump/mydb.sql备份全部数据库的结构(加-d参数)mysqldump -u root -hlocalhost -p123456 -A -d > /da…

【测试】Bug篇

努力经营当下,直至未来明朗! 文章目录一. 如何创建Bug二.Bug的级别三.Bug的生命周期四.跟开发起争执怎么办【高频面试题】:sparkles:小结普通小孩也要热爱生活! 一. 如何创建Bug 创建Bug的要素&#xff1…

逻辑卷管理器:PV、PE、VG、LV

LVM:Logical Volume Manager,逻辑卷管理器。重点:可以弹性的调整文件系统的容量,而不在于性能和数据安全上面,因此如果强调性能和备份,那么直接使用raid即可,不需要用到LVM。 LVM可以整合多个物…

利用VNC远程连接Ubuntu server(图形界面)

有时会需要远程连上ubuntu server图形界面控制调试,这时VNC就是一个挺好的工具, windows 上安装 vnc viewer , ubuntu server 上安装vnc server 进行连接即可 一、ubuntu 安装vnc server 1.sudo apt-get install vnc4server 2.修改vnc pwd …

Django-ORM框架操作数据库不生效问题的定位示例

本文详细描述使用Django 的ORM框架操作PostgreSQL数据库删除不生效问题的定位过程及解决方案,并总结使用ORM框架操作数据库不生效的问题的通用定位方法 问题描述 最近使用Django 的ORM框架操作PostgreSQL数据库总是出现删除不生效(尤其是在并发的时候&…

C#/.Net开发chatGPT、openAI

C#/.Net开发chatGPT、openAI 最近ChatGPT火爆了,自己使用了一下,确实厉害。但是使用官方网站不支持国内访问,好在国内可以使用API调用,所以自己折腾一番,使用C#来调用API。 获取Token 注册账号获取api-keys等操作可…

HR软件如何人性化管理提高留存率

一直以来,我们都在强调“人是企业最大的资产”,这应该是新时代下,企业对于人才管理的共识。在这样的环境中,人力资源部门承担着重要的责任,HR需要迎合当前的人才需求和管理趋势,在“技术运用”和“人性管理…

激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Leaky ReLU激活函数、Parametric ReLU激活函数详细介绍及其原理详解

相关文章 梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Leaky ReLU激活函数、Parametric ReLU激活函数…

从技术、产品、运营3个维度详尽阐述从0到1搭建用户画像系统

通过阅读以下原文获取下载链接。 ​​​​​从技术、产品、运营3个维度详尽阐述从0到1搭建用户画像系统 1 简介 本书借助数据仓库实现一套用户画像系统的方案。从实际工程案例出发,结合多业务场景,内容涵盖开发离线批处理计算的标签及流式计算标签&am…

【C语言进阶】 带你玩转指针

指针进阶一、字符指针二、指针数组三、数组指针3.1:数组指针的使用四、数组参数、指针参数4.1:一维数组传参4.2:二维数组传参4.3:一级指针传参:4.4:二级指针传参:五:函数指针一、字符…

直播 | StarRocks 联合腾讯云分享 EMR-StarRocks 的降本增效之路

极速湖仓(Lakehouse)是 StarRocks 构建极速统一新范式的核心支点。 用户无需将数据导入到 StarRocks 中,无需构建昂贵的数仓,即可实现亚秒级的查询速度,统一分析离线和实时数据,全面发挥湖仓架构的潜在优势…

让国外软件也害怕,4款国产黑科技软件,功能强大且实用

国外月亮不一定比国内圆,国外的软件也不一定比国内好,下面几款软件功能强大到离谱,甚至比国外同款软件更好用。 1、Dism 这是一款妥妥的良心电脑系统优化工具,虽然英文名字,却是由热爱软件的大学生开发,属于…

Android 使用dx/d8将jar转换为dex

前言 在 JDK1.8 之前我们可以通过 dx 工具将 jar 转为 dex。 为了能够支持 JDK1.8,目前 AGP 是通过在 D8/R8 将 class 文件编译成 dex 文件的过程中,对字节码进行转换来实现的,这个转换过程称为脱糖。 因此 JDK1.8 及以后我们需要使用 d8 工…