当前位置: 首页 > news >正文

Java 中 HashMap集合使用

目录

一. HashMap概述

二. HashMap特点

三. HashMap构造方法

四. HashMap的常用方法

五. 使用注意事项

六. 代码示例


一. HashMap概述

HashMap 是 Java 中的一个非常重要的类,它实现了 Map 接口,用于存储键值对(key-value pairs)。HashMap 是基于哈希表的 Map 接口实现,它允许空键(null key)和空值(null value),并且不保证映射的顺序。

二. HashMap特点

  1. 基于哈希表HashMap 使用哈希表来存储数据,因此它具有很快的查找速度,通常为常数时间复杂度 O(1)。
  2. 键值对存储HashMap 存储的是键值对,其中每个键映射到一个值。
  3. 键的唯一性HashMap 中的键是唯一的,不允许重复的键存在。如果尝试插入具有相同键的另一个值,旧值将被新值替换。
  4. 允许空值和空键HashMap 允许键或值为 null
  5. 不保证顺序HashMap 不保证元素的顺序,这意味着元素的顺序可能会在每次使用时发生变化。
  6. 非同步HashMap 不是线程安全的。如果需要线程安全的 HashMap,可以使用 Collections.synchronizedMap 方法包装它,或者使用 ConcurrentHashMap

三. HashMap构造方法

HashMap 提供了多种构造方法,允许你指定初始容量和加载因子等参数:

  1. HashMap():创建一个初始容量为 16,加载因子为 0.75 的空 HashMap
  2. HashMap(int initialCapacity):创建一个指定初始容量和默认加载因子(0.75)的空 HashMap
  3. HashMap(int initialCapacity, float loadFactor):创建一个指定初始容量和加载因子的空 HashMap
  4. HashMap(Map<? extends K, ? extends V> m):创建一个包含映射关系与指定 Map 相同的 HashMap

四. HashMap的常用方法

  1. put(K key, V value):将指定的值与此映射中的指定键关联。
  2. get(Object key):返回指定键所映射的值;如果映射中不包含该键,则返回 null
  3. remove(Object key):如果存在一个键的映射关系,则将其从映射中移除。
  4. keySet():返回映射中包含的键的 Set 视图。
  5. values():返回映射中包含的值的 Collection 视图。
  6. entrySet():返回映射中包含的键值映射关系的 Set 视图。
  7. clear():从映射中移除所有键值对。

五. 使用注意事项

  1. HashMap 中的元素数量超过容量和加载因子的乘积时,HashMap 会自动进行扩容,这涉及到重新计算哈希值和重新分配元素,可能会导致性能下降。
  2. HashMapkeySet()values()entrySet() 方法返回的集合视图支持对原 HashMap 的修改。
  3. 在多线程环境中,如果需要线程安全的 HashMap,可以使用 Collections.synchronizedMap 方法包装它,或者使用 ConcurrentHashMap

六. 代码示例

代码示例中主要使用了一些map操作方法

package com.example.demo01;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;/*** 文件名:HashMapMian* 创建者:* 创建时间:2024-11-02* 描述:HashMap常用操作方式示例*/
public class HashMapMian {public static void main(String[] args) {Map<String,Integer> map = new HashMap<>();//1.调用put()方法增添数据map.put("小红",19);map.put("小明",25);map.put("小黑",27);map.put("小白",21);//2.根据key获取valueSystem.out.println(map.get("小明"));//3.调用remove()方法删除数据map.remove("小明");//4.调用containsKey()方法查看是否存在指定的键boolean b = map.containsKey("小红");System.out.println(b);//5.调用containsValue()方法查看是否存在指定的值boolean bbb = map.containsValue(19);//6.调用isEmpty()方法查看集合是否为空boolean empty = map.isEmpty();System.out.println(empty);//7.获取key列表Set<String> keyedSet = map.keySet();System.out.println("key: "+keyedSet);//8.获取所有值Collection<Integer> values = map.values();System.out.println(values);//用 Java8 流来处理值,value求和int sumOfAges = map.values().stream().mapToInt(Integer::intValue).sum();System.out.println("求和: "+sumOfAges);// 过滤出所有大于 25 的年龄Collection<Integer> filteredValues = map.values().stream().filter(value -> value > 25).collect(Collectors.toList());System.out.println("大于 25 的年龄: "+filteredValues);//9.清空map集合map.clear();System.out.println(map.isEmpty());}
}

http://www.lryc.cn/news/475927.html

相关文章:

  • #渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Mongodb未授权访问
  • 平台化运营公司如何在创业市场招商
  • 飞书API-获取tenant_access_token
  • (新)docker desktop镜像迁移
  • 单向函数、单向陷门函数、困难问题
  • MYSQL 小猫钓鱼 - 猫王争霸之〈主从设计〉
  • arcgis坐标系问题
  • ubuntu 24.04中安装 Easyconnect,并解决版本与服务器不匹配问题
  • 【软考】RUP相关考点总结
  • PostgreSQL 删除角色
  • 华为HCIP —— QinQ技术实验配置
  • 全网最简单的GraphRAG讲解,包你懂
  • rust 压缩解压库flate2保姆级教程
  • 秒杀优化(异步秒杀,基于redis-stream实现消息队列)
  • Node.js——fs模块-文件读取
  • 深入理解 ZooKeeper:分布式协调服务的核心与应用
  • 你竟然还不了解 LDAP?
  • 宝塔使用clickhouse踩坑
  • Linux命令学习记录
  • 一般无人机和FPV无人机的区别
  • 数据结构初阶排序全解
  • MySQL的SQL语句之触发器的创建和应用
  • myWebserver 介绍
  • 钉钉平台开发小程序
  • 九识智能与徐工汽车达成战略合作,共绘商用车未来新蓝图
  • Serverless + AI 让应用开发更简单
  • 外包功能测试就干了4周,技术退步太明显了。。。。。
  • 外观模式及运用场景
  • PyQt5实战——多脚本集合包,UI以及工程布局(二)
  • Python 数据结构对比:列表与数组的选择指南