Java基础核心Map

在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));

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

db2 使用jdbc建立连接时,指定schema,schema不存在也会连接成功

使用db2想指定schema&#xff0c;使用语句如下 jdbc:db2://" hostname ":" port "/" databaseName ":currentSchema" this.databaseSchema ";"; 切记&#xff1a;最后的分号一定要有&#xff0c;否则报错。 但是此处有…

C++11---右值引用(深度讲解)

简要介绍 右值引用是C11的新特性,无论左值引用还是右值引用&#xff0c;都是在给对象取别名 什么是左值 什么是右值 1.左值,左值引用 左值是一个数据的表达式(例如变量或者解引用后的指针),我们可以对其进行取地址和修改赋值,左值可以出现在赋值符号的左边,而右值不能出现在…

算法打卡day32|贪心算法篇06|Leetcode 738.单调递增的数字、968.监控二叉树

算法题 Leetcode 738.单调递增的数字 题目链接:738.单调递增的数字 大佬视频讲解&#xff1a;单调递增的数字视频讲解 个人思路 这个题目就是从例子中找规律&#xff0c;例如 332&#xff0c;从后往前遍历&#xff0c;32不是单调递增将2变为9,3减1&#xff0c;变成了329&…

【Django开发】前后端分离美多商城项目第5篇:用户部分,起源【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备&#xff0c;配置1. 修改set…

Kubernetes(k8s):部署、使用 metrics-server

Kubernetes&#xff08;k8s&#xff09;&#xff1a;部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…

Boost之Log: (3)、简单封装

设计目标: 1、每个Logging source对应一个目录&#xff0c;可以设置日志文件数&#xff0c;日志大小&#xff0c;目录名&#xff0c;文件名等 2、所有logging source日志目录都在一个根目录下。 3、可以动态创建和删除logging source 4、打印出日期时间和日志严重等级 示例代码…

从python角度解析selenium原理

1、selenium工作流程 2、selenium工作原理 &#xff08;1&#xff09;客户端和服务端之间实际是通过http协议进行通信&#xff0c;服务端的接口文档可参考&#xff1a;https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelement &#xff08;2&…

softmax函数的功能及用法

Softmax函数是一种常用的激活函数&#xff0c;通常用于多分类问题的输出层。其功能是将一个具有任意实数值的向量&#xff08;通常称为“logits”&#xff09;转换为一个概率分布&#xff0c;其中每个元素的值表示对应类别的概率。 Softmax函数的公式如下&#xff1a; 给定一…

windows下通过vscode访问ubuntu(绝大部分Linux下开发所采用的方案)

前言 本篇博客是介绍VSCode远程连接Ubuntu进行开发的解决方案&#xff0c;前提是安装好了VMWare&#xff0c;Ubuntu&#xff0c;windows下的VSCode。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关…

库存超卖问题分析

3.5 库存超卖问题分析 有关超卖问题分析&#xff1a;在我们原有代码中是这么写的 if (voucher.getStock() < 1) {// 库存不足return Result.fail("库存不足&#xff01;");}//5&#xff0c;扣减库存boolean success seckillVoucherService.update().setSql(&quo…

Nginx 高级

文章目录 Nginx反向代理概念配置 负载均衡概念配置 动静分离概念配置 网关防盗链keepalivednginx跨域 Nginx 反向代理 概念 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&…

深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度

看这篇前请先把我上一篇了解一下&#xff1a;深入理解数据结构第一弹——二叉树&#xff08;1&#xff09;——堆-CSDN博客 前言&#xff1a; 相信很多学习数据结构的人&#xff0c;都会遇到一种情况&#xff0c;就是明明最一开始学习就学习了时间复杂度&#xff0c;但是在后期…

电商-广告投放效果分析(KMeans聚类、数据分析-pyhton数据分析

电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09; 文章目录 电商-广告投放效果分析&#xff08;KMeans聚类、数据分析&#xff09;项目介绍数据数据维度概况数据13个维度介绍 导入库&#xff0c;加载数据数据审查相关性分析数据处理建立模型聚类结果特征分析…

Ceph学习 - 1.存储知识

文章目录 1.存储基础1.1 基础知识1.1.1 存储基础1.1.2 存储使用 1.2 文件系统1.2.1 简介1.2.2 数据存储1.2.3 存储应用的基本方式1.2.4 文件存储 1.3 小结 1.存储基础 学习目标&#xff1a;这一节&#xff0c;我们从基础知识、文件系统、小节三个方面来学习。 1.1 基础知识 1.…

day01 51单片机

51单片机学习 1 51单片机概述 1.1 51单片机简介 目前使用的51单片机一般是宏晶STC89系列,这其中流传最广的版本,也是我们课程的主角,就是STC89C52RC。 1.2 命名规则 1.3 单片机最小应用系统 2 点亮LED灯 2.1 硬件原理图 这个原理图非常简单,VCC接保护电阻R1,串联LED1最…

IOTX:未来市场爆发点的RWA协议?DePIN赛道被低估的龙头

从基本面来看&#xff0c;IoTeX的目标是创建一个连接的世界&#xff0c;在这个世界中&#xff0c;每个人都能控制自己的数据、设备和身份。通过区块链技术&#xff0c;IoTeX旨在解锁智能设备和数据的潜力&#xff0c;支持新一代的现实世界Dapp和数字资产的发展。IOTX始终致力于…

个性化内容的力量:Kompas.ai如何帮你定制内容

在当今的数字化营销环境中&#xff0c;个性化内容已经成为品牌与消费者建立深层次联系的关键。个性化内容不仅能够更好地满足用户的需求&#xff0c;还能够加深用户的品牌体验&#xff0c;从而提高用户满意度和忠诚度。本文将深入探讨个性化内容在提升用户参与度和忠诚度方面的…

Incus:新一代容器与虚拟机编排管理引擎

Incus是什么&#xff1f; Incus是一个用于编排管理应用型容器、系统型容器及虚拟机实例的管理工具。它是对 Canonical LXD 的继承与发展&#xff0c;引入了更多的存储驱动支持。 Incus项目的产品地址&#xff1a;Linux Containers - Incus - Introduction 在 LXC-Incus 项目…

Java练习

这个练习我用到了继承&#xff0c;多态和封装。 1.继承&#xff1a; Animal 类是一个抽象类&#xff0c;它有两个子类 Dog 和 Cat。 Dog 和 Cat 分别继承自 Animal 类&#xff0c;因此它们可以使用 Animal 类中定义的属性和方法&#xff0c;同时也可以有自己特有的属性和方法。…

鸿蒙OS元服务开发:【(Stage模型)学习窗口沉浸式能力】

一、体验窗口沉浸式能力说明 在看视频、玩游戏等场景下&#xff0c;用户往往希望隐藏状态栏、导航栏等不必要的系统窗口&#xff0c;从而获得更佳的沉浸式体验。此时可以借助窗口沉浸式能力&#xff08;窗口沉浸式能力都是针对应用主窗口而言的&#xff09;&#xff0c;达到预…