> 技术文档 > 【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

  1. HashSet

  2. HashMap

前言

在探索Java集合框架的丰富世界时,我们不可避免地会遇到两个至关重要的成员:HashMap和HashSet。这两个组件虽然在功能上有着明显的交集,但它们在内部实现、性能表现以及使用场景上却有着显著的差异。本文将深入探讨HashMap与HashSet的内部机制,比较它们的性能特点,并指导读者如何在实际开发中做出恰当的选择

一. HashSet

1. set 的初识

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

对于 set 来说, 继承自 Collection 的类, 可以由 SortedSetTreeSetHashSet 来实现。

对于 set 本身 来说, 只 存储 key 的值, 并不 存values , 并且这个 key是唯一的, 且 不可修改的

在本篇文章中将重点讲解 HashSet 来实现 Set 类

鱼式疯言

set 本身的含义有: 设置集合

Java集合框架 中, set 的含义就表示 集合

集合中的关键码 (key) 就有 两大特性 : 1. 无序性 2. 唯一性

2. set 的常见方法使用

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

如上图, 小编介绍几种常见的方法, 足够我们平常 面试和刷算法题 中使用了

如果还想了解的小伙伴可以 参考下面的官方文档 哦 💕 💕 💕 💕

set 官方文档介绍

3. 代码演示

class Test1{  public static void main(String[] args) {  Set<Integer> set = new HashSet(); set.add(1); set.add(2); set.add(3); set.add(4); set.add(5);// 使用迭代器 接收 Iterator<Integer> iterator = set.iterator();// 输出迭代器 while(iterator.hasNext()) {  System.out.println(iterator.next()); }// 判断 4 是否存在 if(set.contains(4)) {  System.out.println(\"删除前\"+ 4 + \"存在!\"); } else {  System.out.println(\"删除后\"+ 4 + \"不存在!\"); }// 得到key 的个数 System.out.println(set.size()); set.remove(4); if(set.contains(4)) {  System.out.println(\"删除后\" + 4 + \"存在!\"); } else {  System.out.println(\"删除后\" + 4 + \"不存在!\"); } }}

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

  • add() 添加了 key 值 , 如果 set 中存在则 添加失败

  • contains() 检查 是否存在该 key

  • remove() 删除 某个key

  • size() 得到key 的个数

  • iterator 迭代器 , 用来得到 全部的key 的一个 整体的迭代器

鱼式疯言

补充说明

  • 对于 set 的用法主要是用于判断是否 有重复元素 , 并且进行 去重操作。 并且用HashSet 实现, 时间复杂度 可以达到 O(1)
  • 对于 HashSet 实现的 set 接口 , 是可以进行 插入 null 的

二. HashMap

1. Map 的初识

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

对于Map 而已, 该接口 不继承Collection 接口 , 可有 HashMap 或 TreeMap 实现,

并且 Map 中存储的是 一对K和 V 的键值对

其中 K 是 关键码(key) 用来 作为标识 , 是用来转化为 哈希地址索引标识, 是 唯一的不可更改 , 不能重复

而 V 是 值 (value) , 用来存储具体需要 存储的数据

上面的解释, 可能小伙伴们还不是很能理解

不妨回忆下我们上篇文章的 哈希表的建立

其中数组的下标就可以作为 索引值 , 而key 就可以通过 某种哈希函数 来转化为 数组的下标

value 就可以刚好对应 数组下标位置对应的值

鱼式疯言

小知识 :

对于 HashMap 实现的Map 来说, 键值对都是可以置为 null 的。

2. Map.Entry

Map.Entry 是一种专门 存放键值对的一种类型 , 并且是 Map 的静态方法 , 可以 不需要对象调用

其实有下面三种方法 ,小编在这里就展示 前两个
【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

下面我们来看看其演示过程

 public static void main(String[] args) {  // entry Map.Entry<String , String> entry = Map.entry(\"s\",\"t\"); System.out.println(entry.getValue()); System.out.println(entry.getKey()); }

【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)_hashset和hasmap查找key

如上图