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

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

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

相关文章

设计一个Rust线程安全栈结构 Stack<T>

在Rust中&#xff0c;设计一个线程安全的栈结构Stack<T>&#xff0c;类似于Channel<T>&#xff0c;但使用栈的FILO&#xff08;First-In-Last-Out&#xff09;原则来在线程间传送数据&#xff0c;可以通过使用标准库中的同步原语如Mutex和Condvar来实现。下面是一个…

JavaScript发票查验接口如何集成?返回错误的信息原因是什么呢?

发票查验的过程中&#xff0c;很可能出现各种各样的问题&#xff0c;那么返回错误信息的原因一般可能是因为以下几种原因&#xff1a;第一种是接口没有调通&#xff0c;第二种是本身发票就是一张错票、假票&#xff0c;第三种可能是税局系统或网络问题等等&#xff0c;如果在使…

AI大模型学习:跨越技术与业务的桥梁

前言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐渗透到我们生活的各个角落&#xff0c;其中AI大模型学习更是成为了引领技术革新的重要力量。然而&#xff0c;要想真正驾驭这一技术&#xff0c;研究者不仅需要具备扎实的数学基础和编程能力&a…

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite&#xff08;精灵&#xff09;是 2D/3D 游戏最常见的显示图像的方式&#xff0c;在节点上添加 Sprite 组件&#xff0c;就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式&#xff0c;包括普通&#xff08;Simple&#xff09;、九宫格&#x…

网易云首页单页面html+css

网页设计与网站建设作业htmlcss 预览 源码查看https://hpc.baicaitang.cn/2083.html

Java | Leetcode Java题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; class Solution {public double findMedianSortedArrays(int[] A, int[] B) {int m A.length;int n B.length;if (m > n) { return findMedianSortedArrays(B,A); // 保证 m < n}int iMin 0, iMax m;while (iMin < iMax) {int…

linux shell命令(进程管理、用户管理)

一、进程的概念 主要有两点&#xff1a; 1.进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;…

Visual Studio 2022报错c1083,win11解决办法

如果头文件报错&#xff0c;并且编译器报错是c1083&#xff0c;无法处理的时候&#xff0c;包括卸载重装也是无济于事的时候 此时可以采取一下办法进行修改 出现这个的主要原因是安装 Windows SDK 时版本出错&#xff0c;需要根据自己的 windows 版本选择安装对应版本的 Wind…

ASTM C1186-22 纤维水泥平板

以无石棉类无机矿物纤维、有机合成纤维或纤维素纤维&#xff0c;单独或混合作为增强材料&#xff0c;以普通硅酸盐水泥或水泥中添加硅质、钙质材料代替部分水泥为胶凝材料&#xff0c;经制浆、成型、蒸汽或高压蒸汽养护制成的板材&#xff0c;俗称水泥压力板。 ASTM C1186-22纤…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的&#xff1a;makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_location_count表&#xff0c;表中设置两个…

实验5-2:判断字符类别(多分支结构)

实验5-2&#xff1a;判断字符类别&#xff08;多分支结构&#xff09; 编写一个程序&#xff0c;其功能为&#xff1a;从键盘输入一个字符ch&#xff0c;判别该字符的类别&#xff0c;并输出向相应信息。 如果输入的字符介于A-Z之间&#xff0c;输出"Its a uppercase let…

Redis底层数据库之SDS

高速的存储介质&#xff1a;内存优秀的底层数据结构高效的IO模型高效的线程模型 1. 动态字符串SDS Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是redis中最常用的一种数据结构。 C语言种字符串存在的一些问题&#xff1a; 获取字符…

代码随想录刷题day42| 01背包理论基础分割等和子集

文章目录 day41学习内容一、 01背包之二维数组解法1.1、什么是01背包1.2、动态规划五部曲1.2.1、 确定dp数组&#xff08;dp table&#xff09;以及下标的含义1.2.2、确定递推公式1.2.3、 dp数组如何初始化1.2.4、确定遍历顺序1.2.5、计算并返回最终结果 二、 01背包之一维数组…

C++经典面试题目(十九)

1、什么是析构函数&#xff1f;它有什么作用&#xff1f; 析构函数是类的特殊成员函数&#xff0c;用于在对象被销毁时执行清理工作。它的名称与类名相同&#xff0c;前面加上波浪号&#xff08;~&#xff09;。析构函数的作用在于确保在对象被销毁时释放占用的资源&#xff0…

【嵌入式智能产品开发实战】(十四)—— 政安晨:通过ARM-Linux掌握基本技能【链接静态库与动态库】

目录 链接静态库 动态链接 与地址无关的代码 全局偏移表 延迟绑定 共享库 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论…

初阶数据结构—算法的时间复杂度和空间复杂度

第一章&#xff1a;数据结构前言&#xff08;Lesson 1&#xff09; 1. 什么是数据结构&#xff1f; 数据结构 (Data Structure) 是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。 2. 什么是算法&#xff1f; 算法(Algorithm)…

【数据处理包Pandas】多级索引的创建及使用

目录 一、元组作为一级索引&#xff08;一&#xff09;示例1&#xff08;二&#xff09;示例2 二、引入多级索引&#xff08;一&#xff09;多级索引的创建&#xff08;二&#xff09;多级索引中的数学选取 首先&#xff0c;导入 NumPy 库和 Pandas 库。 import numpy as np i…

Client sent an HTTP request to an HTTPS server

背景 最近踩坑了 我发现域名&#xff1a;8000可以访问我的服务 但是域名&#xff1a;443却不行&#xff0c;这很反常 结果发现是nginx配置的问题&#xff0c;需要把http改成https&#xff01; 原因 如果你的后端服务&#xff08;运行在8000端口上&#xff09;已经配置了SS…

JS与C#的交互

原文链接&#xff1a;https://blog.csdn.net/Marcus2006/article/details/104986130 背景&#xff1a;1. 为了最大限度复用我们自己之前写的C#库的功能 2. 给我们的工具只提供了JS的流程(:<) &#xff0c;组织忽悠其他人员C#难用&#xff0c;JS好用。 目前edge-js提供了强…

monitor link 联合smart link配合应对复杂的网络

monitor link关键词&#xff1a;上行和下行端口&#xff0c;当上行端口异常&#xff0c;下行端口立即down掉&#xff0c;也就是一种联动机制 如果上行端口里面是smart link方式&#xff0c;则当主从端口都出问题时候&#xff0c;下行端口才会down掉 monitor link 配置步骤 1创…