首页 > 其他分享 >你真的了解HashSet 和HashMap的区别、优缺点、使用场景吗?

你真的了解HashSet 和HashMap的区别、优缺点、使用场景吗?

时间:2023-12-03 09:01:29浏览次数:41  
标签:存储 HashMap HashSet 元素 优缺点 查找 键值

 

HashSet 和 HashMap 是 Java 集合框架中的两个常用类,它们都用于存储和管理数据,但在使用方式、功能和性能上有很大的区别。

HashSet 和 HashMap 的区别

区别一:用途不同

HashSet: HashSet 是一个基于哈希表的集合,用于存储不重复的元素,它不存储键值对。它实际上是基于 HashMap 实现的,只存储了键,而值都设置为同一个特殊值(通常是 null)。

HashMap: HashMap 也是一个基于哈希表的集合,用于存储键值对。它允许你根据键来查找值,因此在存储和检索键值对方面更加灵活。

区别二:数据结构不同

HashSet: HashSet 内部使用哈希表(或哈希集合)来存储元素。哈希表是一个无序的数据结构,元素之间没有特定的顺序。

HashMap: HashMap 内部也使用哈希表,但它存储键值对,其中键和值之间有关联关系。HashMap 具有键的集合和值的集合,键是唯一的,值可以重复。

区别三:元素类型不同

HashSet: HashSet 存储的是单一的元素类型,如整数、字符串等。它用于存储不重复的对象,通过元素的哈希码来判断重复性。

HashMap: HashMap 存储键值对,键和值可以是不同类型的对象。键用于检索值,每个键都必须是唯一的,值可以重复。

区别四:方法不同

HashSet: HashSet 提供了添加、删除、查找元素的方法,例如 add(), remove(), contains() 等。它没有提供根据键查找值的方法。

HashMap: HashMap 提供了添加键值对、删除键值对、根据键查找值的方法,例如 put(), remove(), get() 等。它可以根据键来查找对应的值。

HashSet 和 HashMap 的优缺点

HashSet 的优缺点

优点:

  • 唯一性:HashSet 确保存储的元素不重复,适合用于去重。
  • 快速查找:HashSet 提供了快速的元素查找,因为它使用哈希表。
  • 无序性:HashSet 不保证元素的存储顺序,适合不需要顺序的场景。

缺点:

  • 不支持键值对:HashSet 只存储单一的元素类型,不支持键值对的存储。
  • 无法存储关联数据:无法将额外的数据与元素关联,只能存储元素本身。

HashMap 的优缺点

优点:

  • 键值对存储:HashMap 可以存储键值对,允许将关联数据存储在一起。
  • 快速查找:HashMap 提供了快速的键查找值的能力,适合需要根据键查找值的场景。
  • 灵活性:HashMap 提供了更多的功能,如替换值、遍历键值对等。

缺点:

  • 复杂性:相对于 HashSet,HashMap 的使用可能更加复杂,因为它需要处理键值对的关系。
  • 额外的内存消耗:HashMap 存储键值对,因此需要额外的内存空间。

使用场景

HashSet 的适用场景

数据去重:当你需要存储一组数据,但不关心顺序和关联信息,只关心数据是否重复时,使用 HashSet 是合适的。例如,存储一组唯一的用户名或标签。

集合运算:HashSet 适合用于集合运算,如求交集、并集、差集等。

HashMap 的适用场景

  1. 键值存储:当你需要将数据与关联的键一起存储时,使用 HashMap 是合

适的。例如,存储学生的成绩,其中学生名是键,成绩是值。

数据索引:HashMap 适合用于构建索引,提供快速的查找能力。例如,建立一个电话簿,根据姓名查找电话号码。

需要键值对的功能:如果你需要存储关联数据,并且需要使用键来查找值、替换值或遍历键值对,那么 HashMap 是最好的选择。

实例代码

以下是使用 HashSet 和 HashMap 的示例代码:

import java.util.HashSet;
import java.util.HashMap;

public class SetMapExample {
    public static void main(String[] args) {
        // 使用 HashSet 存储不重复的元素
        HashSet<String> uniqueNames = new HashSet<>();
        uniqueNames.add("Alice");
        uniqueNames.add("Bob");
        uniqueNames.add("Alice"); // 重复元素,不会被插入
        System.out.println("Unique Names: " + uniqueNames);

        // 使用 HashMap 存储键值对
        HashMap<String, Integer> studentGrades = new HashMap<>();
        studentGrades.put("Alice", 90);
        studentGrades.put("Bob", 85);
        System.out.println("Alice's Grade: " + studentGrades.get("Alice"));
    }
}

在这个示例中,HashSet 用于存储不重复的名字,而 HashMap 用于存储学生的成绩信息。这展示了它们的不同用途和功能。

 

标签:存储,HashMap,HashSet,元素,优缺点,查找,键值
From: https://www.cnblogs.com/hanbing81868164/p/17872591.html

相关文章

  • HashMap超详细源码解析
    原文链接:HashMap和HashSet源码解析1、HashMap概念HashMap实现了Map接口,是一种使用键值对存储数据的数据结构。HashMap允许null作为键和值。HashMap不保证元素的顺序,特别是不保证顺序恒定。HashMap是基于哈希表实现的数据结构,具有快速的插入、删除和查找操作。HashMap使用......
  • 2024年几种浏览器播放RTSP视频流的方案及优缺点
    现在越来越多的场景需要用到视频设备了,比如:交通部门、停车场、园区等,大部分需要在浏览器中实时播放视频流,因为RTSP协议具有可扩展性、安全性和易解析等特点,成为大部分摄像头厂商的首选协议,众所周知的是RTSP协议的视频流,浏览器中是无法直接使播放,只有通过插件或者转码来实现。市场......
  • 电脑CentOS 7.6与Windows系统对比:使用方式、优缺点概述
    在多操作系统环境中,CentOS7.6和Windows系统各自独占鳌头,它们在功能、稳定性、兼容性以及安全性等方面都有着各自的优点。这篇文章将对比分析这两个操作系统,以便用户能更好地了解它们的特点和使用方式。一、使用方式1. CentOS7.6CentOS7.6是一种成熟的Linux发行版,它的使用方式主......
  • HashMap
    HashMap是一种非常重要的数据结构,它实现了Map接口,允许我们存储和检索键值对。HashMap使用哈希表作为其内部实现,通过哈希码来定位键值对。HashMap的内部实现:数据结构:HashMap内部使用一个数组实现,每个数组元素称为一个bucket。在默认情况下,HashMap的bucket大小为16。每个bucket可......
  • HashMap底层原理与扩容机制
    1.7数组+链表1.8数组+(链表|红黑树)JAVA1.8之后hashmap树化规则HashMap里面定义了一个常量TREEIFY_THRESHOLD=8,当链表长度超过树化阈值8时,先尝试调用resize()方法进行扩容来减少链表长度,如果数组容量已经>=64(MIN_TREEIFY_CAPACITY),才会进行树化,Node节点转为TreeNod......
  • HashMap
    HashMap是一种基于哈希表的数据结构,它通过使用散列算法来存储和检索数据,因此在查找速度上非常高效。在具体格式上,HashMap在JDK1.8之前采用的是数组+链表的格式,而在JDK1.8之后则采用了数组+链表+红黑树的结构。更具体地,HashMap是通过一个公式:index=hash&(table.length-1),来确定元素......
  • 关于人机界面的定义/类型/开发/优缺点及应用
    在本文中,数维图小编将为您介绍HMI的定义、HMI的类型、HMI的选择、HMI的优缺点。什么是HMI? 人机界面简称HMI,是一种允许人类从控制制造过程的PLC发出指令和接收反馈的设备。换句话说,它是将人连接到机器、系统或设备的用户界面或仪表板。虽然从技术上讲,该术语可以应用于允许......
  • 面试官:为什么阿里不推荐使用 keySet() 遍历 HashMap?太叼钻了吧。。
    来源:https://juejin.cn/post/7295353579002396726Part1引言HashMap相信所有学Java的都一定不会感到陌生,作为一个非常重用且非常实用的Java提供的容器,它在我们的代码里面随处可见。因此遍历操作也是我们经常会使用到的。HashMap的遍历方式现如今有非常多种:使用迭代器(Iterator)......
  • 各个语言的优缺点
    各个语言的优缺点(1)机器语言1.优点执行效率最高编写的程序可以被计算机无障碍理解、直接运行,执行效率高。2.缺点开发效率最低复杂,开发效率低跨平台性差贴近/依赖具体的硬件,跨平台性差学习成本大编出的程序都是0/1代码,数量多还易出错同时还要理解原码、......
  • HashMap中怎么处理桶冲突?
    一、关键词HashMap桶冲突二:知识点--两种方法:1).闭散列法: 若桶的key经过hash算法计算得到的映射仇重复,则把这个value放置在距离原本位置最近的下一个空的映射地址中,需要保持负载因子(=已存储个数/空间大小)大于一定的值(数组法)。2).开散列法: 经过hash计算得到的桶映射相同,则......