HashMap和LinkedHashMap的区别

2023-11-13

java为数据结构中的映射定义了一个接口java.util.Map; 它有四个实现类,分别是:

  • HashMap
  • Hashtable
  • LinkedHashMap
  • TreeMap

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。

Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

总结:

  1. 一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。
  2. 但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
  3. 如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列。

遍历LinkedHashMap:

for(Map.Entry<Character,Integer> set:map.entrySet()){
    if(set.getValue()==1){
       return set.getKey();
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HashMap和LinkedHashMap的区别 的相关文章

随机推荐

  • OpenCV InputArray和OutputArray

    InputArray这个接口类可以是Mat Mat
  • Attention注意力机制--原理与应用

    Attention注意力机制 原理与应用 注意力机制即Attention mechanism在序列学习任务上具有巨大的提升作用 在编解码器框架内 通过在编码段加入A模型 对源数据序列进行数据加权变换 或者在解码端引入A模型 对目标数据进行加
  • 那些会阻碍程序员成长的细节[3]

    前两篇文间几乎是想到那里就写到那里 没有分门别类的加以阐述 本篇延续以上两篇文章的思路 在之前的基础再追加 没有看过前两篇文章的同学可通过这两个链接回顾一下 那些会阻碍程序员成长的细节 一 那些会阻碍程序员成长的细节 二 不能主动推动事物前
  • Halcon标定板标定

    halcon标定有自己的标定助手可以演示 不过拿到VS里面却不是很适用 尤其是关于畸变矫正和透视矫正算子的解释也没有 下面两个算子set origin pose gen image to world plane map关键参数怎么计算也没有
  • 【MyBatis-Plus】之批量插入

    一 应用情景介绍 在实际的项目开发过程中 常常遇到批量保存数据的场景 当数据量比较少 比如只有几条数据的情况下 我们可以使用 for 循环来 insert 数据 但如果数据量比较多的情况下就不行 特别是并发的情况下 因为这样会增加数据库的负
  • 一个学习编程的网站

    推荐一个学习编程的网站 https www runoob com
  • 请假流程

    作者 nogocn 在某一公司中 部门员工要休假的话需要部门主管的批准 如果休假天数大于10天的话 在部门主管的同意后 还必须上级主管批准 如果是部门主管要休假只要上级主管批准即可 在休假被批准之前 申请人可以撤销休假申请 每个员工还有多少
  • STM32的功耗模式

    按功耗由高到低排列 STM32 具有运行 睡眠 停止和待机四种工作模式 低功耗各模式下芯片工作情况 睡眠模式 仅关闭了内核时钟 内核停止运行 但其片上外设 CM4 核心的外设全都还照常 运行 有两种方式进入睡眠模式 它的进入方式决定了从睡眠
  • Java实现数据脱敏的方法

    在Java中 可以使用各种技术来实现数据脱敏 下面将介绍几种常见的Java实现数据脱敏的方法 字符串截取 字符串截取是一种简单的数据脱敏方法 它将敏感数据的一部分字符替换成 号或其他字符 例如 将身份证号码的前6位和后4位替换成 号 这样可
  • 开发一个文生图的功能

    文章目录 效果 开发环境 原理 核心代码 代码仓库 问题 效果 开发环境 Python 3 10 PyCharm 原理 借助开源项目stable diffusion 通过该项目封装python库diffusers 可以轻易的实现文生图的功能
  • css 强制不换行

    css中强制不换行 文本不会换行 文本会在在同一行上继续 直到遇到 br 标签为止 white space nowrap
  • LeetCode-剑指 Offer II 114. 外星文字典,BFS 搜索算法及图的表示

    剑指 Offer II 114 外星文字典 现有一种使用英语字母的外星文语言 这门语言的字母顺序与英语顺序不同 给定一个字符串列表 words 作为这门语言的词典 words 中的字符串已经 按这门新语言的字母顺序进行了排序 请你根据该词典
  • P25透明屏:探究在商业广告领域的应用表现

    P25透明屏是一种新型的显示屏技术 具有高透明度和高分辨率的特点 它可以将图像或视频直接投影到透明的表面上 使得观众可以透过屏幕看到背后的景物 同时也能够看到屏幕上的内容 P25透明屏广泛应用于商业展示 户外广告 产品展示等领域 P25透明
  • 写代码的心得

    一 初级阶段 管他三七二十一 需求直接开干 程序能跑通能干活就行 二 中级阶段 拿到需求心里过一遍 80 的架构和接口已经梳理定义完毕 尚有部分细节的没想明白怎么实现 边开发边想 边写边重构 等开发完 架构也定义清晰 三 高级阶段 拿到需求
  • 编写出一个通用的人员类(Person),该类具有姓名(Name)、年龄(Age)、性别(Sex)等域。然后对Person 类的继承得到一个学生类(Student),该类能够存放学生的5门课的成绩,并能

    编写出一个通用的人员类 Person 该类具有姓名 Name 年龄 Age 性别 Sex 等域 然后对Person 类的继承得到一个学生类 Student 该类能够存放学生的5门课的成绩 并能求出平均成绩 最后在Main函数中对studen
  • vue点击当前元素添加class 删除兄弟元素的class

    在vue中当我们要实现点击元素动态添加类名时 我们不能像JQ那样去用 xxx addClass class siblings removeClass class 实现 那我们应该怎样去做呢 解决方案 1 在data里面申明一个属性 默认值最
  • LeetCode-1780. 判断一个数字是否可以表示成三的幂的和【数学】

    LeetCode 1780 判断一个数字是否可以表示成三的幂的和 数学 题目描述 解题思路一 将n转为3进制 如果没有2出现那么返回true 例如12 110 3 返回true 21 210 3 返回false 解题思路二 0 解题思路三
  • 计算机毕业设计-基于SSM的个性影片推荐管理系统

    项目系统开发的技术 Java语言 Java主要采用CORBA技术和安全模型 可以在互联网应用的数据保护 它还提供了对EJB Enterprise JavaBeans 的全面支持 java servlet API Java java serv
  • 重磅发布

    微众银行区块链积极听取社区意见和建议 基于多年研发FISCO BCOS底层开源平台的经验 沉淀了一套 FISCO BCOS应用落地指南 百科式地为FISCO BCOS的应用落地提供操作指引 现将该指南开放回馈社区 获取指南 可在文末添加 小
  • HashMap和LinkedHashMap的区别

    java为数据结构中的映射定义了一个接口java util Map 它有四个实现类 分别是 HashMap Hashtable LinkedHashMap TreeMap Map主要用于存储健值对 根据键得到值 因此不允许键重复 重复了覆盖