Java HashMap 和 HashSet 的高效使用技巧

news/2024/11/29 6:40:24/

Java HashMap

HashMap 是一种哈希表,它存储键值对。键用于查找值,就像数组中的索引一样。HashMap 的优势在于它可以使用任何类型作为键,并且查找速度很快。

创建 HashMap

// 导入 HashMap 类
import java.util.HashMap;public class Main {public static void main(String[] args) {// 创建一个名为 capitalCities 的 HashMap 对象,将存储 String 键和 String 值HashMap<String, String> capitalCities = new HashMap<>();}
}

添加项目

// 添加键和值(国家,城市)
capitalCities.put("England", "London");
capitalCities.put("Germany", "Berlin");
capitalCities.put("Norway", "Oslo");
capitalCities.put("USA", "Washington DC");

访问项目

// 获取 England 的首都
String capitalOfEngland = capitalCities.get("England");

删除项目

// 删除 England 的首都
capitalCities.remove("England");

HashMap 大小

// 获取 HashMap 中的项目数量
int size = capitalCities.size();

循环遍历 HashMap

// 遍历 HashMap 并打印键和值
for (String key : capitalCities.keySet()) {String value = capitalCities.get(key);System.out.println("Key: " + key + ", Value: " + value);
}

使用其他类型

HashMap 可以存储任何类型的键和值。例如,您可以存储 Integer 键和 String 值:

// 创建一个名为 people 的 HashMap 对象,将存储 Integer 键和 String 值
HashMap<Integer, String> people = new HashMap<>();// 添加键和值(ID,姓名)
people.put(1, "John Doe");
people.put(2, "Jane Doe");// 获取 ID 为 1 的姓名
String name = people.get(1);

HashMap 是一种强大的数据结构,可用于存储各种类型的数据。它具有快速查找速度和灵活的键值对存储机制,使其成为许多应用程序的理想选择。

HashMap 的优势:

  • 快速查找速度
  • 可以存储任何类型的键和值
  • 灵活的键值对存储机制

HashMap 的劣势:

  • 不是线程安全的
  • 可能会出现哈希碰撞

建议:

  • 如果需要快速查找数据,请使用 HashMap
  • 如果需要线程安全的数据结构,请使用 ConcurrentHashMap
  • 如果需要避免哈希碰撞,请使用 LinkedHashMap

Java HashSet

HashSet 是一个无序集合,其中每个元素都是唯一的。它基于哈希表实现,因此查找速度很快。

创建 HashSet

// 导入 HashSet 类
import java.util.HashSet;public class Main {public static void main(String[] args) {// 创建一个名为 cars 的 HashSet 对象,将存储字符串HashSet<String> cars = new HashSet<>();}
}

添加项目

// 添加项目
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("BMW"); // 不会重复添加
cars.add("Mazda");// 查看 HashSet
System.out.println(cars);

检查项目是否存在

// 检查项目是否存在
boolean isPresent = cars.contains("Mazda");// 输出结果
System.out.println("Mazda 在 HashSet 中吗? " + isPresent);

删除项目

// 删除项目
cars.remove("Volvo");// 查看 HashSet
System.out.println(cars);

HashSet 大小

// 获取 HashSet 大小
int size = cars.size();// 输出结果
System.out.println("HashSet 大小:" + size);

循环遍历 HashSet

// 循环遍历 HashSet
for (String car : cars) {System.out.println(car);
}

使用其他类型

HashSet 可以存储任何类型的元素。例如,您可以存储 Integer 元素:

// 创建一个名为 numbers 的 HashSet 对象,将存储整数
HashSet<Integer> numbers = new HashSet<>();// 添加元素
numbers.add(1);
numbers.add(2);
numbers.add(3);// 循环遍历 HashSet
for (int number : numbers) {System.out.println(number);
}

HashSet 是一种非常有用的数据结构,可用于存储各种类型的数据。它具有快速查找速度和无序的特点,使其成为许多应用程序的理想选择。

HashSet 的优势:

  • 快速查找速度
  • 无序,可以更快地添加和删除元素
  • 允许存储任何类型的元素

HashSet 的劣势:

  • 不保留元素的插入顺序
  • 可能会出现哈希碰撞

建议:

  • 如果需要快速查找数据并且不需要保留元素的插入顺序,请使用 HashSet
  • 如果需要保留元素的插入顺序,请使用 LinkedHashSet
  • 如果需要避免哈希碰撞,请使用 TreeMap

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注


http://www.ppmy.cn/news/1379675.html

相关文章

java Day7 正则表达式|异常

文章目录 1、正则表达式1.1 常用1.2 字符串匹配&#xff0c;提取&#xff0c;分割 2、异常2.1 运行时异常2.2 编译时异常2.3 自定义异常2.3.1 自定义编译时异常2.3.2 自定义运行时异常 1、正则表达式 就是由一些特定的字符组成&#xff0c;完成一个特定的规则 可以用来校验数据…

JS-10-函数

一、函数的定义 function 函数名(参数列表) {// 函数体 } 示例&#xff1a; function abs(x) {if (x > 0) {return x;} else {return -x;} } 请注意&#xff0c;函数体内部的语句在执行时&#xff0c;一旦执行到return时&#xff0c;函数就执行完毕&#xff0c;并将结果…

Python 学习——Python BeautifulSoup 库文档

目录 一、 Beautiful Soup 4.4.0 文档1.1 寻求帮助 二、 快速开始三、 安装 Beautiful Soup3.1 安装完成后的问题3.2 安装解析器 四、 如何使用五、 对象的种类5.1 Tag5.1.1 Name5.1.2 Attributes5.1.3 多值属性 5.2 可以遍历的字符串5.3 BeautifulSoup5.4 注释及特殊字符串 六…

计网《一》|互联网结构发展史|标准化工作|互联网组成|性能指标|计算机网络体系结构

计网《一》| 概述 计算机网络在信息时代的作用为什么说互联网是自印刷术以来人类在存储和交换领域的最大变革&#xff1f; 什么是互联网呢&#xff1f;互联网有什么用呢&#xff1f;为什么互联网能为用户提供许多服务 互联网基础结构发展的三个阶段第一个阶段&#xff1a;第二阶…

JMM(Java Memory Model)内存模型

Java内存模型&#xff0c;规范了计算机内存与java虚拟机之间的协调工作&#xff0c;即规定了 将java 虚拟机中的变量存储到内存中和从内从中取出来的内存细节。 Java内存模型中规定了所有的变量都存储在内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程对变量的…

《C++游戏编程入门》第1章 类型、变量与标准I/O: Lost Fortune

《C游戏编程入门》第1章 类型、变量与标准I/O: Lost Fortune 1.1.1 使用C编写游戏1.1.2 生成可执行文件1.1.3 错误处理 1.2 第一个C程序01.game_over.cpp01.game_over2.cpp01.game_over3.cpp 1.4 使用算术运算符01.expensive_calculator.cpp 1.5 声明和初始化变量01.game_stats…

探索容器技术的世界:从 Docker 到 Podman,从 Kubernetes 到生态发展

随着云计算和微服务架构的兴起&#xff0c;容器技术在近年来迅速发展。Docker 是最早引领容器技术革命的先驱&#xff0c;但随着市场的变化和需求的不断演变&#xff0c;一些新的容器技术也开始崭露头角&#xff0c;例如 Podman。同时&#xff0c;容器编排工具 Kubernetes 也在…

20240309web前端_第一周作业_古诗词

作业三&#xff1a;古诗词 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…