Java中的HashSet详解和使用示例_动力节点Java学院整理

Java中的HashSet详解和使用示例

什么是HashSet?

HashSet是Java的一个集合类,它实现了Set接口,用于存储不重复的元素。HashSet基于哈希表实现,查询的效率非常高,不过HashSet不保证元素的顺序。在使用HashSet时,需要注意元素必须重写hashCode()和equals()方法。

HashSet的常用方法

添加元素方法

向HashSet中添加元素使用add(E e)方法,可以添加任意类型的元素,返回值为boolean类型。如果 HashSet 中没有该元素,则返回true,否则返回false。

HashSet<String> set = new HashSet<String>();
set.add("A");
set.add("B");
set.add("C");

判断元素是否存在方法

判断HashSet中是否存在该元素使用contains(Object o)方法,该方法返回boolean类型。如果HashSet中存在o元素,则返回true,否则返回false。

HashSet<String> set = new HashSet<String>();
set.add("A");
set.add("B");
set.add("C");
System.out.println(set.contains("B")); // 输出 true
System.out.println(set.contains("D")); // 输出 false

删除元素方法

从HashSet中删除元素使用remove(Object o)方法,该方法返回boolean类型。如果HashSet中存在o元素,则删除该元素并返回true,否则返回false。

HashSet<String> set = new HashSet<String>();
set.add("A");
set.add("B");
set.add("C");
set.remove("B");
System.out.println(set); // 输出 [A, C]

HashSet使用示例

示例一:存储学生信息

假设我们需要将若干学生的信息存储到HashSet中。

class Student {
    public int id;
    public String name;
    public int age;

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

HashSet<Student> set = new HashSet<Student>();
set.add(new Student(1, "张三", 18));
set.add(new Student(2, "李四", 19));
set.add(new Student(3, "王五", 20));
set.add(new Student(1, "张三", 18)); // 重复元素

System.out.println(set.size()); // 输出 3
System.out.println(set.contains(new Student(1, "张三", 18))); // 输出 true

在这个示例中,我们定义了一个Student类,用于存储学生的基本信息。在创建HashSet之前,我们需要在Student对象中重写hashCode()和equals()方法,实现比较学生的id是否相同。

示例二:去重

假设我们需要将最近一周中每天登录我们网站的用户的用户名保存到一个HashSet中,以便后续统计活跃用户数。但有些用户可能一周内登录了多次,我们只需记录每个用户的用户名一次。

HashSet<String> userSet = new HashSet<String>();
userSet.add("Alice");
userSet.add("Bob");
userSet.add("Charlie");
userSet.add("Dan");
userSet.add("Charlie"); // 重复元素

System.out.println(userSet.size()); // 输出 4

在这个示例中,我们只需要往HashSet中添加每个用户的用户名,HashSet会帮我们自动去重,最后输出HashSet的size即为活跃用户数量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的HashSet详解和使用示例_动力节点Java学院整理 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 用java实现文件的断点续传并发下载

    用Java实现文件的断点续传并发下载 在实际应用中,我们经常会需要下载大文件,如视频、软件等,然而,当我们开始下载后,由于网络问题或者其他原因,下载速度较慢或者下载失败,就需要重新下载,这浪费了我们很多时间和流量。为了避免这种情况,我们可以使用文件的断点续传功能,这样即使下载失败,也可以从上次下载的地方继续下载,不会浪费时间和流量。 实现思路 文件的断点续传…

    其他 2023年3月28日
    00
  • uniapp打包安卓App的两种方式(云打包、本地打包)方法详解

    uniapp打包安卓App的两种方式(云打包、本地打包)方法详解 uniapp是一种跨平台的开发框架,可以用于开发多个平台的应用程序,包括安卓App。在uniapp中,我们可以使用两种方式进行安卓App的打包:云打包和本地打包。以下是详细的步骤和示例说明: 云打包方式 登录HBuilderX:首先,确保你已经安装了HBuilderX,并登录你的账号。 创建项…

    other 2023年10月13日
    00
  • 小型软件的通用界面设计制作指南

    小型软件的通用界面设计制作指南是一个涵盖了界面设计、色彩搭配、交互设计等方面的指南。以下是详细的制作攻略。 设计前准备 在进行小型软件界面设计之前,需要了解一下如下几个问题。 用户群体分析 确定在设计软件界面时需要考虑到哪些用户群体,如他们的年龄、职业、使用设备等等,这些因素会影响软件的布局和交互方式。 界面设计风格 确定软件的界面设计风格,如扁平化、半扁平…

    other 2023年6月26日
    00
  • python使用epoll实现服务端的方法

    下面是Python使用epoll实现服务端的方法的完整攻略。 什么是epoll epoll是Linux内核提供的一种高性能、高扩展性的I/O多路复用机制。使用epoll可以监听多个socket上的I/O事件,并在有事件发生时立刻通知应用程序。与传统的select/poll相比,epoll能够处理上千个并发连接的情况,并且 epoll在注册和注销文件描述符时都…

    other 2023年6月27日
    00
  • 基于java构造方法Vector创建对象源码分析

    基于Java构造方法Vector创建对象源码分析 介绍 在Java中,Vector是一个动态数组,它可以根据需要自动增长和缩小。Vector类提供了多个构造方法来创建Vector对象。本攻略将详细讲解如何使用构造方法创建Vector对象,并分析其源码。 构造方法 Vector类提供了以下几个常用的构造方法: Vector(): 创建一个空的Vector对象。…

    other 2023年8月6日
    00
  • 从数据类型 varchar 转换为 numeric 时出错.

    下面是从数据类型 varchar 转换为 numeric 时出错的完整攻略,包括原因分析、解决方法和两个示例说明。 原因分析 在将 varchar 类型的数据转换为 numeric 类型时,可能会出现以下错误: 转换失败,因为输入字符串格式不正确。 转换失败,因为输入字符串超出了 numeric 类型的范围。 转换失败,因为输入字符串包含了非数字字符。 这些…

    other 2023年5月5日
    00
  • 在Linux系统上加密文件和目录的教程

    Linux系统上加密文件和目录的教程 1. 安装加密软件 Linux系统上有很多加密软件可供选择,请根据需要选择相应的软件进行安装。本文以GnuPG为例,介绍其基本使用方法。安装命令如下: sudo apt-get install gnupg 2. 生产GPG密钥对 GPG加密软件采用了公钥加密和私钥解密的方式进行文件加密,因此,需要先生产密钥对。执行以下命…

    other 2023年6月27日
    00
  • window.onload 加载完毕的问题及解决方案(下)

    下面是详细讲解“window.onload 加载完毕的问题及解决方案(下)”的完整攻略。 标题 窗口加载完成事件和DOM加载完成事件分别是什么?它们之间有什么区别? 正文 窗口加载完成事件 在前一篇文章中,我们已经学习了窗口加载完成事件。window.onload事件将在文档所有资源已经加载完成后触发,这包括图片、样式、脚本等。当window.onload事…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部