请你介绍一下map的分类和常见的情况

2023-11-19

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

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

Hashmap (3)是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,

  • 关于遍历:遍历时,取得数据的顺序是完全随机的。
  • 关于null:HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;
  • 不支持线程同步,线程不安全:HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,
  • 可以用锁来解决这个问题,或者ConcurrentHashMap:可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

Hashtable(2)与 HashMap类似,它继承自Dictionary类,不同的是:它不允许记录的键或者值为空;

  • 它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢。

LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。

  • 在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关

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

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

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

请你介绍一下map的分类和常见的情况 的相关文章

随机推荐

  • Redis事务

    7 Redis事务 7 1 背景 假如你给你朋友转账 此时你的账户会减少1bw 你朋友的账户会多1bw 此时如果你转账失败 但是你朋友的账户也多了1bw 此时这对于银行来说 这就是事故 说明你的程序存在很大漏洞 不能保证数据的原子性 此时就
  • 通俗讲解c++ future/shared_future

    目录 future介绍 std future对象只有在有效的 valid 情况下才有用 useful 查询future对象是否有效 future的拷贝构造函数是被禁用的 对future的处理 四种方式 获取future的状态 future
  • Qt 提升窗口部件 没有效果

    1 新建一个控件的子类 然后再控件上右键点击提升 没有效果 原因1 查看提升的控件的类型是否正确 原因2 查看提升的子类的路径是否正确 如果C 文件跟 pro文件在同一级目录下 直接写头文件 如果在子目录下要写子目录 前面要加 原因3 如果
  • Qt笔记28:QJsonObject和QByteArray的相互转换

    brief 字节数组转Json param byteArray return QJsonObject getJsonFromByteArray const QByteArray byteArray QJsonParseError jsonP
  • 2023年我国网络安全人才市场状况

    网络安全人才市场状况 本章以智联招聘多年来形成的丰富的招聘 求职信息大数据为基础 结合了奇安信集团 在网络安全领域多年来的专业研究经验 相关研究成果具有很强的代表性 对涉及安全人才 的全平台招聘需求与求职简历进行分析 注 本章中的需求指数采
  • Android Studio虚拟机启动后没有开机问题解决

    这里使用的是Android Studio 3 2版本 在Win 10系统上运行 其他环境可能会有所不同 目录 一 新增虚拟机 二 有报错提示时的可能解决办法 三 无报错提示时的可能解决办法 一 新增虚拟机 1 打开AVD Manager A
  • datax导入hive动态分区

    配置hive支持动态分区
  • pandas数据提取

    pandas是一个python数据分析库 提供了多种方法提取数据 一种常用的方法是使用索引和列标签 例如 import pandas as pddf pd read csv data csv 获取特定行 row df loc 0 获取特定列
  • vuepc端实现数据加载_【项目实战经验】vuecli3,实现PC端分辨率适配

    vue cli3 根据屏幕大小适配样式 最近做了一个大屏 考虑到要在不同的显示器上 显示同一套代码 所以我就想到了 阿里的 lib flexible 干货非常多 千万不要错过细节哦 废话不说 直接干 1 安装需要响应的包 npm i lib
  • 【AI实战】大语言模型(LLM)有多强?还需要做传统NLP任务吗(分词、词性标注、NER、情感分类、知识图谱、多伦对话管理等)

    AI实战 大语言模型 LLM 有多强 还需要做传统NLP任务吗 分词 词性标注 NER 情感分类 多伦对话管理等 大语言模型 大语言模型有多强 分词 词性标注 NER 情感分类 多伦对话管理 知识图谱 总结 大语言模型 大语言模型 LLM
  • IDEA 配置aliyunmaven 仓库地址无法下载依赖jar 包

    由于Mavn 默认公共仓库地址是国外的导致下载jar 包比较慢 所以推荐使用aliyun maven 仓库镜像 编辑setting xml 文件 在mirrors节点下 新增如下内容 我按照百度检索的结果 在maven 的setting x
  • 接口测试八(压缩解压)

    转自 http www 360doc com content 16 0128 15 30056680 531241550 shtml 一 什么是HTTP压缩 HTTP压缩采用通用的压缩算法如gzip等压缩HTML JavaScript或CS
  • Vue项目创建

    1 创建项目 在终端中输入命令 vue create 项目名称用以创建项目 在命令输入前会有命名提示符 提示当前所在目录是哪里 输入命令之后 等待片刻 会出现选择vue版本 选择vue2项目 2 配置路由 配置路由 需要下载依赖库 要通过c
  • 常见脚本命令

    1 taskkill是Windows命令行里终止指定程序 进程 的命令 f 表示强制终止 im 表示指定的进程名称 例如 explor exe 2 start C Program Files erwin Data Modeler r9 er
  • MVC发展历程及思想

    两种web应用程序的开发模式 model 1 JSP JavaBean JSP负责 页面显示 页面跳转 调用Javabean处理数据 处理请求 JavaBean负责 数据封装保存 数据处理逻辑 适用场景 model 1 方式适合开发业务逻辑
  • android开发:jd-gui的下载和使用

    参考 jd gui的下载和使用
  • 常见JS动画效果

    作为一名前端开发人员 想要的大多都是 在开发过程中 看着自己制作的动画的炫酷以及困难的解决 开发结束后 自己的项目 成果可以被他人认可接受 人们浏览网页时 若一个网页动画效果丰富炫酷 性能良好 体验度良好 自然会受到吸引去打来浏览 吸引用户
  • 为什么模板不能模板分离编译(模板的定义与声明分离)

    目录 一 什么是分离编译 二 为什么不能 三 解决方案 1 模板定义的位置显式实例化 2 将声明和定义放到同一个文件里 不让定义和声明分离 一 什么是分离编译 一个程序 项目 由若干个源文件共同实现 而每个源文件单独编译生成目标文件 最后将
  • qt sql 查询 正序,倒序

    QString str QString SELECT Date Time People Event FROM TB LOG WHERE People 1 order by Date desc limit 0 2000 arg 模式 orde
  • 请你介绍一下map的分类和常见的情况

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