Java基础核心Map

news2024/11/25 0:53:13

在Java中,Map是一种用于存储键值对(key-value pairs)的集合类型。它提供了一种将键映射到值的方式,其中每个键在Map中都是唯一的。Map接口是java.util包中的一部分。

常用实现类

  1. HashMap: 基于哈希表实现的Map,它提供了平均时间复杂度为O(1)的插入、删除和查找操作。但它不保证元素的顺序。

  2. TreeMap: 基于红黑树实现的Map,它保持元素的有序状态。它提供了基于键的排序,因此所有键对象必须实现Comparable接口或者通过构造方法传入一个Comparator对象。

  3. LinkedHashMap: 继承自HashMap,它保持元素插入的顺序,可以按照插入顺序或者访问顺序进行迭代。

  4. Hashtable: 类似于HashMap,但是它是线程安全的。不过,在大多数情况下,推荐使用ConcurrentHashMap来代替Hashtable

  5. ConcurrentHashMap: 是HashMap的线程安全版本,它提供了高效的并发访问。

 

此图源自:【韩顺平 零基础30天学会Java】图 Map_idea 无法查看map扩容 韩顺平-CSDN博客 

 

常用方法:

  • put(K key, V value): 将指定的值与指定的键关联在一起,并放入Map中。
  • get(Object key): 返回指定键所映射的值,如果此Map不包含该键的映射关系,则返回null
  • remove(Object key): 删除指定键及其对应的值。
  • containsKey(Object key): 判断Map中是否包含指定的键。
  • containsValue(Object value): 判断Map中是否包含指定的值。
  • size(): 返回Map中键值对的数量。
  • isEmpty(): 判断Map是否为空。

 常见应用:

存储配置信息Map可用于存储应用程序的配置信息,其中键表示配置项的名称,值表示配置项的值。这种方式使得配置信息可以轻松地被读取和修改。

Map<String, String> config = new HashMap<>();
config.put("server", "localhost");
config.put("port", "8080");
config.put("username", "admin");
config.put("password", "password");

缓存Map可以用作缓存,其中键表示缓存的键,值表示相应的缓存数据。使用Map作为缓存可以快速查找和检索数据。

Map<String, Object> cache = new HashMap<>();
cache.put("user1", new User("John", 25));
cache.put("user2", new User("Alice", 30));

 请求参数和响应参数的映射:在Web开发中,常常使用Map来表示HTTP请求的参数和响应的参数。

Map<String, String> requestParams = new HashMap<>();
requestParams.put("username", "john");
requestParams.put("password", "password");

Map<String, Object> responseParams = new HashMap<>();
responseParams.put("status", "success");
responseParams.put("message", "Login successful");

 计数器Map可以用于计数器,其中键表示要计数的对象,值表示该对象出现的次数。

Map<String, Integer> counter = new HashMap<>();
String[] words = {"apple", "banana", "apple", "orange", "banana"};
for (String word : words) {
    counter.put(word, counter.getOrDefault(word, 0) + 1);
}

 路由表:在网络编程中,Map可以用来存储路由表,其中键表示目的地址,值表示下一跳的地址。

Map<String, String> routingTable = new HashMap<>();
routingTable.put("192.168.0.1", "192.168.1.1");
routingTable.put("192.168.0.2", "192.168.1.2");

数据库结果集映射:在数据库操作中,Map可以用于将数据库查询的结果集映射为键值对,便于处理和操作数据。

 Map<Integer, String> studentMap = new HashMap<>();
// 将数据库查询结果映射到Map中
ResultSet resultSet = statement.executeQuery("SELECT id, name FROM students");
while (resultSet.next()) {
    int id = resultSet.getInt("id");
    String name = resultSet.getString("name");
    studentMap.put(id, name);
}

遍历方法:

 使用entrySet()遍历(推荐): 这种方法使用Map.entrySet()方法返回Map中包含的所有键值对的Set视图,然后通过迭代这个Set来遍历Map

Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("apple", 10);
map.put("banana", 20);
map.put("orange", 15);

// 遍历Map
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

使用keySet()遍历: 这种方法使用Map.keySet()方法返回Map中所有键的Set视图,然后通过迭代这个Set来遍历Map,并通过键获取对应的值。

Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("apple", 10);
map.put("banana", 20);
map.put("orange", 15);

// 遍历Map
for (String key : map.keySet()) {
    System.out.println("Key: " + key + ", Value: " + map.get(key));
}

 使用Java 8的forEach()方法: 在Java 8及以上版本中,Map接口提供了forEach()方法,可以使用Lambda表达式来遍历Map

Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("apple", 10);
map.put("banana", 20);
map.put("orange", 15);

// 使用forEach遍历Map
map.forEach((key, value) -> System.out.println("Key: " + key + ", Value: " + value));

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

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

相关文章

java中split(“.“)失效问题

来源&#xff1a;比较版本号_牛客题霸_牛客网 在写到这道算法题的时候&#xff0c;发现一个问题&#xff0c; String[] leftversion1.split("."); 返回结果为空&#xff0c;经过查阅得知&#xff0c;是split中的正则表达式里的问题&#xff0c;这个 . 代表的意思是…

KIMI官方精选提示词,好牛的感觉啊啊啊!

晚上好&#xff0c;我是云桃桃。一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 255篇原创内容-公众号 后台回复“前端工具”可获取开发工具&#xff0…

图论- 最小生成树

一、最小生成树-prim算法 1.1 最小生成树概念 一幅图可以有很多不同的生成树&#xff0c;比如下面这幅图&#xff0c;红色的边就组成了两棵不同的生成树&#xff1a; 对于加权图&#xff0c;每条边都有权重&#xff08;用最小生成树算法的现实场景中&#xff0c;图的边权重…

使用Vue实现CSS过渡和动画

01-初识动画和过渡 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>使用vue实现css过渡和动画&l…

Ethernet修改网卡名称

如何修改Ethernet网卡名称 kernel/common/net/core/dev.c ---------------------------------------------------------------------- 8849/** 8850 * register_netdev - register a network device 8851 * @dev: device to register 8852 * 8853 * Take a completed network d…

github本地仓库push到远程仓库

1.从远程仓库clone到本地 2.生成SSH秘钥&#xff0c;为push做准备 在Ubuntu命令行输入一下内容 [rootlocalhost ~]# ssh-keygen -t rsa < 建立密钥对&#xff0c;-t代表类型&#xff0c;有RSA和DSA两种 Generating public/private rsa key pair. Enter file in whi…

什么是数据库的下一站?

SU7 能突出重围&#xff1f; 3 月 28 日&#xff0c;小米发布 SU7。罗永浩在社交平台发文谈小米SU7&#xff0c;“各种补贴拿完了差不多20万吧&#xff0c;足以把这个价位段的大部分油车、杂牌电车、不够智能的电车都淘汰掉了。小米很可能继平价手机市场之后&#xff0c;在大众…

微信小程序开发学习笔记——4.6tabBar底部tab栏配置用法

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、tabBar https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar 二、icon下载 https://www.iconfont.cn/collections/index?spma…

js实现websocket断线重连功能

在项目开发中我们可能经常要使用websocket技术&#xff0c;当连接发生断线后&#xff0c;如果不进行页面刷新将不能正常接收来自服务端的推送消息。为了有效避免这种问题&#xff0c;我们需要在客户端做断线重连处理。当网络或服务出现问题后&#xff0c;客户端会不断检测网络状…

一个在线的NodeJS环境和终端运行界面

WebContainer 是一个基于浏览器的运行时&#xff0c;用于执行 Node.js 应用程序和操作系统命令&#xff0c;完全在浏览器选项卡内。以前需要云虚拟机来执行用户代码的应用程序&#xff0c;在 WebContainers 中可以完全在客户端运行与传统云虚拟机相比具有许多优势。 WebContai…

卡尔曼滤波笔记

资料&#xff1a;https://www.zhihu.com/question/47559783/answer/2988744371 https://www.zhihu.com/question/47559783 https://blog.csdn.net/seek97/article/details/120012667 一、基本思想 在对一个状态值进行估计的时候&#xff0c;如果想测量值更准&#xff0c;很自然…

数据结构进阶篇 之 【插入排序】详细讲解(直接插入排序,希尔排序)

千万不要因为一件事不会做而失去信心&#xff0c;你又不是只有这一件事不会&#xff0c;你还有很多呢 一、插入排序 1.直接插入排序 InsertSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 直接插入排序的特性总结 2.希尔排序 ShellSort 2.1 基本思想 2.2 实现原理 …

6.7物联网RK3399项目开发实录-驱动开发之Camera摄像头的使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接&#xff1a;https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f Camera 使用 简介 AIO-3399J 开发板分别带有两个 MIPI&#xff0c;MIPI 支持最高 4K 拍照&#xff0c;并支持 1080P 30fp…

282: 数字的秘密

收藏 难度&#xff1a;简单 标签&#xff1a;卓越班选拔 题目描述 在数字王国中&#xff0c;人人都有一个号码&#xff0c;人人都想知道这个号码对自己意味着什么。国王便做了很多个盒子&#xff0c;每个盒子拥有一个号码。人们需要通过一定的方法才能确定哪个盒子有自己的…

【Java 集合进阶】单练集合顶层接口collction迭代器

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

jsp将一个文本输入框改成下拉单选框,选项为字典表配置,通过后端查询

一&#xff0c;业务场景&#xff1a; 一个人员信息管理页面&#xff0c;原来有个最高学历是文本输入框&#xff0c;可以随意填写&#xff0c;现在业务想改成下拉单选框进行规范化&#xff0c;在专科及以下、本科、研究生三个选项中选择&#xff1b; 二&#xff0c;需要解决问…

流程控制分支结构

一&#xff0c;流程控制 分为三种&#xff1a;顺序流程控制&#xff0c;分支流程控制&#xff0c;循环流程控制 二&#xff0c;顺序流程控制 先执行A&#xff0c;再执行B 三&#xff0c;分支流程控制if语句 从上到下执行代码的过程中&#xff0c;根据不同的条件&#xff0…

[游戏开发]Unreal引擎知识

工程通常会选择Development_Editor模式&#xff0c;它会过滤掉很多Debug信息&#xff0c;开发期间占用内存更小&#xff0c;项目运行更流畅&#xff0c;但也有缺点&#xff0c;就是部分断点信息看不到&#xff0c; 有两种解决办法&#xff1a; 1&#xff0c;选择DebugGame_Ed…

NULL与nullptr的区别

NULL是宏定义&#xff0c;如下&#xff1a; 如果用NULL&#xff0c;在函数重载时&#xff0c;NULL的类型被推断为int。这是不好的&#xff0c;所以引入nullptr。nullptr是c11引入的关键字&#xff0c;它就代表空指针。

Maven是什么? Maven的概念+作用

1.Maven的概念 Maven中文意思为“专家“、”内行“的意思&#xff0c;它是一个项目管理工具&#xff0c;可以对Java项目进行构建、依赖管理&#xff0c;通俗点 就是通过pom.xml文件的配置获取jar包不用手动的去添加jar包。 2.Maven的作用 对于大的工程&#xff0c;需要引用各…