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 ...
随机推荐
- linux下virtualenvwrapper安装
安装 pip3 install virtualenvwrapper -i https://pypi.douban.com/simple 设置linux的用户配置文件配置virtualenvwrappe ...
- python开发接口时,使用jsonschema模块对数据进行校验
import jsonschema schema = { "type": "object", # 先声明每个键都是对象 "properties&quo ...
- python selenium list index out of range
常见错误原因 常见错误原因 其他错误原因 场景 使用selenium循环打开并跳转到新的网页,然后关闭新的窗口,然后回到原来窗口,这时候获取list中的值,报错: list index out of ...
- 【LeetCode回溯算法#12】二叉树的直径,树形dp的前置内容(使用dfs)
二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 . 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 .这条路径可能经过也可能不经过根节点 root . 两节点之间路径的 长度 由它们 ...
- Spingboot替换掉jar包里面的@Bean
问题 如下图,我们需要替换掉JsoncCfg配置类里面的YCloudObjectMapper这个Bean. 这个Bean是在依赖的第三方jar包中的,因为用了@Bean而不是像@Component这种 ...
- 第125篇: 期约Promise基本特性
好家伙,本篇为<JS高级程序设计>第十章"期约与异步函数"学习笔记 1.非重入期约 1.1.可重入代码(百度百科) 先来了解一个概念 可重入代码(Reentry cod ...
- Tomcat8.5简介
1. Tomcat简介[1] Apache Tomcat是Servlet/JSP的容器.Tomcat8.5 实现了由 JCP 组织 (Java Community Process) 制定的Servle ...
- opencv库图像基础2-python
opencv库图像基础2-python 图像的简单变换 先导入库 import cv2 import matplotlib.pyplot as plt import numpy as np 1.图像的 ...
- GaussDB(DWS)运维利刃:TopSQL工具解析
本文分享自华为云社区<GaussDB(DWS)运维利刃:TopSQL工具解析>,作者:胡辣汤. 在生产环境中,难免会面临查询语句出现异常中断.阻塞时间长等突发问题,如果没能及时记录信息,事 ...
- OpenCV开发笔记(七十六):相机标定(一):识别棋盘并绘制角点
前言 知道图像畸变矫映射的原理之后,那么如何得到相机的内参是矫正的第一步,内参决定了内参矩阵(中心点.焦距等),用内参矩阵才能计算出投影矩阵,从而将原本畸变的图像矫正为平面投影图像. 本篇描述了 ...