Java.数据结构.HashMap

目录

1基本概念

2数据结构

 3常用操作 

3.1 put(K key, V value):插入键值对。

3.2 get(Object key):根据键获取值。

3.3 remove(Object key):移除键值对。

3.4 containsKey(Object key):判断Map中是否包含指定的键。

3.5 containsValue(Object value):判断Map中是否包含指定的值。、

3.6 keySet():返回Map中所有键的集合。

3.7 values():返回Map中所有值的集合。

3.8 entrySet():返回Map中所有键值对的集合。

3.9 类计数数组作用。

优缺点:

注意事项:


1基本概念

  • HashMap是Java集合框架中的一个类,实现了Map接口。
  • 它使用键值对(key-value)的方式存储数据,允许使用null键和null值(但null键只能有一个)。
  • HashMap不保证映射的顺序,即插入顺序和遍历顺序可能不同

2数据结构

  • JDK 1.7及以前:HashMap的底层实现是数组+链表(每个数组存放一个链表的头结点)。
  • JDK 1.8及以后:HashMap的底层实现优化为数组+链表或红黑树。当链表长度超过一定阈值(默认为8)时,会自动将链表转换为红黑树,以提高查找效率
  • HashMap使用哈希函数将键映射到数组的索引位置。
  • 如果多个键映射到同一个索引位置,则使用链表或红黑树来处理哈希冲突。

假如我们输入1,4,5,6,7,9这串数字,那么其内部就是这样的结构。

 3常用操作 

  • 3.1 put(K key, V value):插入键值对。
  • 注意:由于 key 值唯一,存放相同 key 的 value 值时,后放入的值会覆盖之前的value值。
  • HashMap<String, Integer> map = new HashMap<>();  
    map.put("apple", 1);  
    map.put("banana", 2);
  • 3.2 get(Object key):根据键获取值。
  • Integer value = map.get("apple");  
    System.out.println(value);  // 输出: 1
  •     getOrDefault():根据键获取值,若没有则返回默认值。
  • Integer value = map.getOrDefault(apple,10);//若没有对应的key值的返回 10
  • 3.3 remove(Object key):移除键值对。
  • map.remove("banana");
  • 3.4 containsKey(Object key):判断Map中是否包含指定的键。
  • boolean containsKey = map.containsKey("apple");  
    System.out.println(containsKey);  // 输出: true
  • 3.5 containsValue(Object value):判断Map中是否包含指定的值。、
  • boolean containsValue = map.containsValue(1);  
    System.out.println(containsValue);  // 输出: true
  • 3.6 keySet():返回Map中所有键的集合。
  • Set<String> keySet = map.keySet();  
    System.out.println(keySet);  // 输出: [apple] (假设已移除banana)
    我们常常用foreach循环来遍历map中的key值
  •         for (Integer key: map.keySet()) {if(map.get(key)==1){return key;}}
  • 3.7 values():返回Map中所有值的集合。
  • Set<String> keySet = map.keySet();  
    System.out.println(keySet);  // 输出: [apple] (假设已移除banana)
  • 3.8 entrySet():返回Map中所有键值对的集合。
  • Set<Map.Entry<String, Integer>> entrySet = map.entrySet();  
    for (Map.Entry<String, Integer> entry : entrySet) {  System.out.println(entry.getKey() + ": " + entry.getValue());  
    }
  • 3.9 类计数数组作用
  • 除了上面这些作用,我们还常常利用put和getOrDefault来模拟计数数组的作用
  •  for (int i = 0; i < nums.length; i++) {map.put(nums[i],map.getOrDefault(nums[i],0)+1);}

    这样 map 中的 value 值就等于 k 其 key 值在 nums 数组中出现的次数

优缺点:

  • 缺点:非线程安全、不保证顺序。
  • 快速查找(平均时间复杂度为O(1))、灵活(可以存储不同类型的对象)

注意事项:

  • HashMap的扩容机制:当容量达到阈值(默认是当前容量的0.75倍)时,会发生扩容,容量变为原来的两倍,此时需要重新哈希已有的键值对。

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

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

相关文章

Android Camera2 与 Camera API技术探究和RAW数据采集

Android Camera2 Android Camera2 是 Android 系统中用于相机操作的一套高级应用程序接口&#xff08;API&#xff09;&#xff0c;它取代了之前的 Camera API。以下是关于 Android Camera2 的一些主要信息&#xff1a; 主要特点&#xff1a; 强大的控制能力&#xff1a;提供…

神秘的二叉树

一.什么是树 都说艺术来源于生活&#xff0c;技术同样也是来源于生活。什么是树&#xff0c;它是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说…

小程序 uniapp+Android+hbuilderx体育场地预约管理系统的设计与实现

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户 注册…

VUE2常见问题以及解决方案汇总(不断更新中)

解决vue项目中 el-table 的 row-click 事件与行内点击事件冲突&#xff0c;点击事件不生效&#xff08;表格行点击事件和行内元素点击事件冲突&#xff09;需要阻止事件冒泡 问题描述 1.点击列的编辑按钮&#xff0c;会触发按钮本身事件&#xff0c;同时会触发行点击事件 2.点…

Kotlin 处理字符串和正则表达式(二十一)

导读大纲 1.1 处理字符串和正则表达式1.1.1 分割字符串1.1.2 正则表达式和三引号字符串1.1.3 多行三引号字符串IntelliJ IDEA 和 Android Studio 中三重引号字符串内部的语法高亮显示 1.1 处理字符串和正则表达式 Kotlin 字符串与 Java 字符串完全相同 可以将 Kotlin 代码中创建…

R包的安装、加载以及如何查看帮助文档

0x01 如何安装R包 一、通过R 内置函数安装&#xff08;常用&#xff09; 1.安装CRAN的R包 install.packages()是一个用于安装 R 包的重要函数。 语法&#xff1a;install.packages(pkgs, repos getOption("repos"),...) 其中&#xff1a; pkgs&#xff1a;要安…

问题-python-运行报错-SyntaxError: Non-UTF-8 code starting with ‘\xd5‘ in file 汉字编码问题

​ 编码: 把字符转换成字节序列的过程。因为计算机只能处 理二进制数据&#xff0c;所以不能直接处理文本&#xff0c;需要先把文本转换为二进制数据。 解码: 把二进制数据转换成字符的过程。把接收到的数据转换成程序中使用的编码方式。 ​ 这个报错原因就是编码和解码没达成…

【C++ STL】手撕vector,深入理解vector的底层

vector的模拟实现 前言一.默认成员函数1.1常用的构造函数1.1.1默认构造函数1.1.2 n个 val值的构造函数1.1.3 迭代器区间构造1.1.4 initializer_list 的构造 1.2析构函数1.3拷贝构造函数1.4赋值运算符重载 二.元素的插入,删除,查找操作2.1 operator[]重载函数2.2 push_back函数:…

[已解决] Install PyTorch 报错 —— OpenOccupancy 配环境

目录 关于 常见的初始化报错 环境推荐 torch, torchvision & torchaudio cudatoolkit 本地pip安装方法 关于 OpenOccupancy: 语义占用感知对于自动驾驶至关重要&#xff0c;因为自动驾驶汽车需要对3D城市结构进行细粒度感知。然而&#xff0c;现有的相关基准在城市场…

TriLite完成A轮扩展融资:加速AR微型投影仪技术创新与市场拓展

近日,全球领先的AR微型投影仪开发商TriLite宣布成功完成A轮扩展融资,将A轮融资总额提升至超过2000万欧元。这一轮融资不仅彰显了资本市场对TriLite技术实力和市场潜力的高度认可,更为其后续在AR微型投影仪领域的技术研发、产品迭代以及市场拓展提供了坚实的资金保障。以下是…

大厂笔试现已经禁用本地IDE怎么看

如果我说本来面试做题这种事情就是反人类你相信吗&#xff1f; 这个罪恶的源头就是 Google&#xff0c;说是为了选择高素质的计算机编程水平的人才&#xff0c;然后把面试就变成了考试&#xff0c;最大的受益者当然是印度人了。 当把一个考察过程变成标准化的考试过程&#x…

【AI知识点】置信区间(Confidence Interval)

置信区间&#xff08;Confidence Interval, CI&#xff09; 是统计学中用于估计总体参数的范围。它给出了一个区间&#xff0c;并且这个区间包含总体参数的概率等于某个指定的置信水平&#xff08;通常是 90%、95% 或 99%&#xff09;。与点估计不同&#xff0c;置信区间通过区…

Unity Input System自动生成配置

参考视频 创建及配置新输入系统 New Input System&#xff5c;Unity2022.2 最新教程《勇士传说》入门到进阶&#xff5c;4K_哔哩哔哩_bilibili ProjectSettings设置 Unity编辑器菜单栏选择Edit->Project Settings->Player->Other Settings,将Api Compatibility Level…

OpenAI 开发者大会!实时语音功能有API了,GPT-4o支持多模态微调,上下文cache功能上线

家人们&#xff01;十一假期第1天&#xff0c; OpenAI一年一度的开发者大会又来了惹&#xff01;今年的开发者大会分成三部分分别在美国、英国、新加坡三个地点举办&#xff0c;刚刚结束的是第一场。 去年的OpenAI开发者大会公布了GPT-4 Turbo和GPTs&#xff0c;今年没有大更新…

allegro精确画圆形边框

1.显示原点位置&#xff1a; 2.class-subclass依次选择Board Geometry-Outline 3.菜单ADD---Circle,右侧option,依次设置如下&#xff0c;如图可设置为圆心&#xff08;0&#xff0c;0&#xff09;&#xff0c;半径为42mm的边框&#xff0c;不要忘了右键Done&#xff0c;完成绘…

【目标检测】工程机械车辆数据集2690张4类VOC+YOLO格式

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2694 标注数量(xml文件个数)&#xff1a;2694 标注数量(txt文件个数)&#xff1a;2694 标注…

《Windows PE》3.2.4节表

节表由多个节表项&#xff08;IMAGE_SECTION_ HEADER&#xff09;组成&#xff0c;每个节表项&#xff08;40个字节&#xff09;记录了 PE中与某个特定的节有关的信息&#xff0c;如节的属性、节 的大小、在文件和内存中的起始位置等。节表中节的数量由字段IMAGE_FILE_HEADER. …

防止错误输入!Excel单元格限制输入内容的三种有效方式

在Excel中&#xff0c;限制单元格输入内容可以帮助避免数据输入错误&#xff0c;确保数据的一致性和准确性。今天小编分享三种方法&#xff0c;可以轻松限制Excel单元格的输入内容&#xff0c;确保数据输入符合预期要求&#xff0c;一起来看看吧&#xff01; 方法一&#xff1a…

el-pagination组件封装

组件使用 源代码&#xff1a; <script setup> import Pagination from /components/pagination/index.vue import {ref} from "vue";const pageNum ref(1) const pageSize ref(10) const total ref(120)function loadData() {// 加载数据 } </script>…

[云] Hands-on with a sample application--DockerCoins 挖矿程序!

DockerCoins 挖矿程序&#xff01;&#x1f4b0;&#x1f433;&#x1f4e6;&#x1f6a2; 不&#xff0c;你不能用 DockerCoins 买咖啡。 DockerCoins 如何工作&#xff1a; 生成一些随机字节&#xff1a; 程序首先生成一串随机的字节数据。这些随机字节用于模拟挖矿过程中的…