Java HashMap 和 HashSet 的高效使用技巧
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,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
Java HashMap 和 HashSet 的高效使用技巧的更多相关文章
- Java笔记(七)HashMap和HashSet
HashMap和HashSet 一)HashMap 1.Map接口 interface Map<K,V> { int size();//查看Map中的键值对个数 boolean isEmp ...
- java 中遍历hashmap 和hashset 的方法
一.java中遍历hashmap: for (Map.Entry<String, Integer> entry : tempMap.entrySet()) { String ...
- java该HashTable,HashMap和HashSet
同一时候我们也对HashSet和HashMap的核心方法hashcode进行了具体解释,见<探索equals()和hashCode()方法>. 万事俱备,那么以下我们就对基于hash算法的 ...
- Java集合(5)一 HashMap与HashSet
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树. ...
- 【转】Java学习---HashMap和HashSet的内部工作机制
[原文]https://www.toutiao.com/i6593863882484220430/ HashMap和HashSet的内部工作机制 HashMap 和 HashSet 内部是如何工作的? ...
- 牛客网Java刷题知识点之为什么HashMap和HashSet区别
不多说,直接上干货! HashMap 和 HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...
- 【Java集合】HashSet源码解析以及HashSet与HashMap的区别
HashSet 前言 HashSet是一个不可重复且元素无序的集合.内部使用HashMap实现. 我们可以从HashSet源码的类注释中获取到如下信息: 底层基于HashMap实现,所以迭代过程中不能 ...
- [翻译]Java HashMap工作原理
大部分Java开发者都在使用Map,特别是HashMap.HashMap是一种简单但强大的方式去存储和获取数据.但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.Ha ...
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算h ...
- JAVA hashmap知识整理
HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.HashMap的工作原理.ArrayList与Vect ...
随机推荐
- .net core6 Log4记录日志
一.引言 .net core6在文件方面是精简了,所以配置方面也发生了部分变化:下面记录下.net core6中怎么配置Log4 进行日志记录. 二.项目创建 1).首先引用两个包:在Nuget中引入 ...
- 03、Etcd 客户端常用命令
上一讲我们安装 etcd 服务端,这一讲我们来一起学学如何使用 etcd 客户端常见的命令.文章内容来源于参考资料,如若侵权,请联系删除,谢谢. etcd可通过客户端命令行工具 etcdctl 对et ...
- [Linux] rockylinux9.1 的部署使用过程 -- ZFS 虚拟机 cockpit podman samba
备选镜像 | Rocky Linux rocky linux 使用记录 - 个人文章 - SegmentFault 思否 # https://blog.csdn.net/NeverGUM/articl ...
- 使用IDEA中的Git提交代码到错误的分支,回滚代码后如何强制push代码-2022新项目
一.问题由来 当前新项目的开发分支非常的多,自己看了一下大概有20多个分支.每次开发完一个版本就会重新创建几个新的分支,每个开发人员对应一个 自己单独的开发分支,因此才会出现这么多的分支.分支多了之后 ...
- snipaste 截屏工具快捷键 alt + A 还有 Ctrl + Shift + A
snipaste 截屏工具快捷键 alt + A 还有 Ctrl + Shift + A 因为有时候 alt 会取消右键等菜单
- 从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载
本文为从零开始写 Docker 系列第六篇,实现类似 docker -v 的功能,通过挂载数据卷将容器中部分数据持久化到宿主机. 完整代码见:https://github.com/lixd/mydoc ...
- Kotlin学习快速入门(8)—— 委托
原文地址:Kotlin学习快速入门(8)-- 属性委托 - Stars-One的杂货小窝 委托其实是一种设计模式,但Kotlin把此特性编写进了语法中,可以方便开发者快速使用 委托对应的关键字是by ...
- 简洁版docker跑mongo
参考,欢迎点击原文:https://www.runoob.com/docker/docker-install-mongodb.html(菜鸟) 以下是拉取docker镜像并运行起来 docker pu ...
- WINDOWS.H already included. MFC apps must not #include Windows.h
做C++.C#和C++/CLI的混合编程有一段时间了,填了不少的坑. 今天又遇到一错误,想着挺容易就解决,估计是大脑疲惫,折腾许久才找到原因. 错误: 错误 C1189 #error: WINDOWS ...
- 新零售SaaS架构:线上商城系统架构设计
零售商家为什么要建设线上商城? 传统的实体门店服务范围有限,只能吸引周边500米以内的消费者.因此,如何拓展服务范围,吸引更多的消费者到店,成为了店家迫切需要解决的问题. 缺乏忠实顾客,客户基础不稳, ...