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 ...
随机推荐
- GPS坐标系转换 go golang 版本
GPS坐标系转换 坐标系 解释 WGS84坐标系 地球坐标系,国际通用坐标系 GCJ02坐标系 火星坐标系,WGS84坐标系加密后的坐标系:Google国内地图.高德.腾讯地图 使用 BD09坐标系 ...
- 如何在矩池云上运行 AI 图像编辑工具 DragGAN
5 月,DragGAN 横空出世,在开源代码尚未公布前,就在Github上斩获近 20000 Star,彼时,页面上只有效果图和一句"Code will be released in Jun ...
- WireShark学习笔记(一)
1.从WireShark分析网络层协议的传输 下面是网络接口层协议,从图中可以看到两个相邻设备的MAC地址,因此该网络包才能以接力的方式传送到目的地址. 下面是网络层,在这个包中,主要的任务是把TCP ...
- 在本地搭建 SVN 教程
SVN 使用教程 以下内容参考自:SVN使用详细教程_大梦谁先觉i的博客-CSDN博客_svn使用教程 一.SVN 安装 1.1 软件下载 服务器:Downloads | VisualSVN 客户端: ...
- .vscode\settings.json .gitignore 项目文件配置
一.项目本地新增配置文件: .vscode\settings.json { // editor "editor.formatOnSave": true, "e ...
- 在Linux平台使用wps卡顿现象解决方法
是因为软件占据的内存过多,需要关掉目前不使用的软件,以释放系统内存.
- 【大语言模型基础】-详解Transformer原理
一.Transformer Transformer最开始用于机器翻译任务,其架构是seq2seq的编码器解码器架构.其核心是自注意力机制: 每个输入都可以看到全局信息,从而缓解RNN的长期依赖问题. ...
- C++11 中运行代码块耗时的方法以及坑(chrono 方法)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- PAT 甲级【1009 Product of Polynomials】
/* 系数为0不输出 貌似runtime异常也显示答案不正确*/ import java.io.BufferedReader; import java.io.IOException; import j ...
- 大年学习linux(第五节---目录结构)
五.目录结构 可以用ls / 查看linux的目录结构 bin data etc lib media opt root sbin sys usr boot dev home lib64 mnt pro ...