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 ...
随机推荐
- day03--vi和vim快捷方式及操作系统目录介绍
1.编辑命令vi vim是vi的增强版 提高编程的效率 1.vi命令模式信息 命令模式: 可实现很多特殊功能操作 不能输入任何内容 编辑模式: 可编辑内容信息 底行模式:可以输入特殊的命令信息 wq保 ...
- offline RL | 读读 Decision Transformer
论文标题:Decision Transformer: Reinforcement Learning via Sequence Modeling,NeurIPS 2021,6 6 7 9 poster( ...
- 【Azure 存储服务】MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度
问题描述 把MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度,这是什么情况呢? 问题解答 因为MP4上传到Azure Blob后,根据公开的 ...
- 【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录
问题描述 Azure应用程序网关设置 set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD 登录使用cookie时使用不了. 分析过程 重写网 ...
- Glide源码解析四(解码和转码)
本文基于Glide 4.11.0 Glide加载过程有一个解码过程,比如将url加载为inputStream后,要将inputStream解码为Bitmap. 从Glide源码解析一我们大致知道了Gl ...
- C++ //提高编程 模板(泛型编程 STL) //模板不可以直接使用 它只是一个框架 //模板的通用并不是万能的 //语法 //template<typename T> //函数模板两种方式 //1.自动类型推导 必须推导出一致的数据类型T,才可以使用 //2.显示指定类型 模板必须确定出T的数据类型,才可以使用
1 //C++提高编程 模板(泛型编程 STL) 2 //模板不可以直接使用 它只是一个框架 3 //模板的通用并不是万能的 4 //语法 5 //template<typename T> ...
- Codeforces Round 638 (Div. 2)B. Phoenix and Beauty
B. Phoenix and Beauty 这道题目学到的东西: 从给出的数据范围观察,得到一些有用信息(峰哥教的) 考虑无解的情况' 其实这题考虑怎么操作是比较难的,如果能想出来满足条件的结果就比较 ...
- 因IPv4和IPv6协议不同而引发的第三方接口调用失效的问题
记录一次因IPv4和IPv6协议不同而引发的第三方接口调用失效的问题,仅供大家参考!!! 背景介绍 公司有一个微信小程序,我做后端的,负责给小程序提供数据接口.后来因为一系列原因小程序要对接一个中控( ...
- python数组概念和实例解析
一 概念 如果我们需要一个只包含数字的列表,那么array.array比list更高效.数组支持所有跟可变序列有关的操作,包括.pop,.insert和.extend. 另外,数组还提供从文件读取和存 ...
- Android resource DarkActionBar not found问题解决
原文: Android resource DarkActionBar not found问题解决 | Stars-One的杂货小窝 几天没改过的代码,突然就无法打开项目了 报错信息如下 在全网都找不到 ...