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日

相关文章

  • OPPOFindX6Pro开发者选项在哪 OPPOFindX6Pro进入开发者模式教程

    下面是关于“OPPO Find X6 Pro开发者选项在哪,如何进入开发者模式”的完整攻略。 OPPO Find X6 Pro开发者选项在哪 开启OPPO Find X6 Pro的开发者选项需要先找到该选项在手机设置中的位置。步骤如下: 打开手机设置; 向下滑动页面,找到“系统与更新”选项; 点击进入“系统与更新”页面; 向下滑动页面,找到“关于手机”选项,…

    other 2023年6月26日
    00
  • 跟老齐学Python之数据类型总结

    跟老齐学Python之数据类型总结 本文将对Python中常见的数据类型进行总结,包括数字、字符串、布尔值、列表、元组、集合、字典等。 数字 Python中常见的数字类型有整型(int)、浮点型(float)和复数(complex),都可以进行基本的算术运算。 示例1:计算圆的面积 r = 5 # 半径 pi = 3.14 area = pi * r ** …

    other 2023年6月27日
    00
  • node模块之path——path.join和path.resolve的区别

    下面是“node模块之path——path.join和path.resolve的区别的完整攻略”,包括基本原理、实现方法和两个示例说明。 基本原理 在 Node.js 中,path 模块提供了一些用于处理文件路径的方法。其中,path.join() 和 path.resolve() 方法都可以用于拼接文件路径,但它们的实现方式和使用场景有所不同。 path.…

    other 2023年5月5日
    00
  • C语言详解用char实现大小写字母的转换

    C语言详解用char实现大小写字母的转换攻略 在C语言中,我们可以使用char类型来实现大小写字母的转换。下面是一个详细的攻略,包含了两个示例说明。 步骤1:了解ASCII码表 在C语言中,每个字符都有一个对应的ASCII码值。大写字母的ASCII码值范围是65到90,而小写字母的ASCII码值范围是97到122。我们可以利用这个特性来实现大小写字母的转换。…

    other 2023年8月16日
    00
  • JAVA 数据结构链表操作循环链表

    JAVA 数据结构链表操作循环链表 什么是链表 链表(Linked List)是一种常见的基础数据结构,它可以存储一个线性序列,但与数组不同的是,链表中的元素并不是在内存中连续存储的,而是通过指针将它们链接在一起。 链表由一系列节点组成,每个节点包含两部分:数据和指向下一节点的指针。最后一个节点的指针指向 NULL 表示链表的结尾。 链表常见的操作有:插入、…

    other 2023年6月27日
    00
  • Android的HTTP操作库Volley的基本使用教程

    Volley是Google在2013年开源的一款优秀的HTTP操作库,能够帮助Android开发者快速地进行网络请求操作。在本篇攻略中,我们将介绍Volley的基本用法,包括如何添加依赖库、创建RequestQueue对象、创建StringRequest对象等详细步骤,并带有两个示例说明供开发者参考。 一、添加Volley依赖库 要使用Volley库,首先需…

    other 2023年6月27日
    00
  • C++和python实现单链表及其原理

    实现单链表及其原理 基本概念 单链表(Singly Linked List)是一种链式存储结构,由一系列节点组成,每个节点包含数据域和一个指向下一个节点的指针域。相比于数组,单链表的插入、删除操作更加方便高效,但是单链表的查询操作效率较低。 C++实现 节点定义 在C++实现中,需要先定义节点(struct Node),包含数据域(data)和指针域(nex…

    other 2023年6月27日
    00
  • 用 Win2003 架设邮件服务器 图文详解

    下面是基于Win2003 架设邮件服务器图文详解: 准备工作 在安装邮件服务器前,需要确保服务器处于良好状态,并满足以下条件: Windows Server 2003操作系统 具有Internet连接 空闲IP地址 确保服务器防火墙开启SMTP端口25 安装SMTP服务 在“控制面板”中打开“添加或删除程序”选项 在“添加或删除程序”中,选择“添加/删除Wi…

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