首页 > 其他分享 >Set集合的具体子类:HashSet

Set集合的具体子类:HashSet

时间:2024-10-16 15:21:33浏览次数:6  
标签:Set name HashSet 子类 age set1 Student public

一、HashSet的特点:

底层数据结构是哈希表,查找速度快,且元素唯一

二、HashSet的使用特点:

1.向HashSet集合中添加基本数据类型或者String元素的时候会自动去重

import java.util.HashSet;

public class HashSetDemo1 {
    public static void main(String[] args) {
        //使用HashSet存储字符串元素
        HashSet<String> set1 = new HashSet<>();

        //添加元素
        set1.add("hello");
        set1.add("world");
        set1.add("hello");
        set1.add("java");
        set1.add("hello");
        set1.add("hadoop");

        System.out.println("set1: " + set1);

    }
}

2.当我们传入的数据是一个具体类对象的时候:若想要使用HashSet对元素进行去重,需要元素类型本身重写hashCode方法和equals方法

1.先编写一个学生类,里面需要重写hashCode方法和equals方法才能进行去重

import java.util.Objects;

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

    public Student() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        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 age == student.age && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2.编写测试类,创建类对象,并进行赋值

import java.util.HashSet;

public class HashSetDemo2 {
    public static void main(String[] args) {
        //使用HashSet存储学生对象元素,当学生的姓名和年龄一样的时候,认为重复了
        HashSet<Student> set1 = new HashSet<>();

        Student s1 = new Student("李刚", 18);
        Student s2 = new Student("钱志强", 16);
        Student s3 = new Student("刘亦菲", 18);
        Student s4 = new Student("李刚", 18);
        Student s5 = new Student("吴问强", 19);

        set1.add(s1);
        set1.add(s2);
        set1.add(s3);
        set1.add(s4);
        set1.add(s5);

        for (Student student : set1) {
            System.out.println(student);
        }
    }
}

标签:Set,name,HashSet,子类,age,set1,Student,public
From: https://www.cnblogs.com/ndmtzwdx/p/18469437

相关文章

  • List集合的具体子类:LinkedList
    一、LinkedList集合的特点:底层的数据结构是双链表,增删快,查询慢,线程不安全,效率高二、特殊功能:publicvoidaddFirst(Ee)及addLast(Ee)addFirst是在集合的第一个位置进行添加,addLast是在集合的最后一个位置进行添加publicEgetFirst()及getLast()getFirst是获取集合的第一......
  • 【C++】C++ STL 树形结构容器全解析:map、set、multimap、multiset 的使用与区别
    C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C++内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriority......
  • C++ STL迭代器、resize和reserve区别、map和unordered_map区别,vector和List区别、map
    1.STL迭代器删除元素迭代器失效是指在对容器进行修改时,原有的迭代器可能变得不可用。正确删除元素的方法是使用erase,并返回新的有效迭代器。示例代码#include<iostream>#include<vector>intmain(){  std::vector<int>vec={1,2,3,4,5};  //输出......
  • Idea-Maven的Setting文件盘配置
    目录1.Setting.xml2.Setting.xml选其中之一就行。直接全部复制就行。1.Setting.xml<?xmlversion="1.0"encoding="UTF-8"?><!--LicensedtotheApacheSoftwareFoundation(ASF)underoneormorecontributorlicenseagreements.SeetheNOTI......
  • 3DRealCar: An In-the-wild RGB-D Car Dataset with 360-degree Views
    3DRealCar:AnIn-the-wildRGB-DCarDatasetwith360-degreeViewsDu,XiaobiaoandSun,HaiyangandWang,ShuyunandWu,ZhuojieandSheng,HongweiandYing 来自很多单位,其中企业所在单位是LiAuto项目地址:https://xiaobiaodu.github.io/3drealcar/ gitcode: h......
  • BC2402C. 多重集(set)
    BC2402C.多重集(set)题意给你两个集合\(A,B\),开始时集合为空。有\(n\)次操作,每次往其中一个集合插入或者删除一个数对\((a,b)\),保证删除的数对存在。每次操作后输出\(\min_{x,y}\{\max(a_x+a_y,b_x+b_y),(a_x,b_x)\inA,(a_y,b_y)\inB\}\)。思路一个显然的优化是按照......
  • JedisCluster 中psetex()方法如何使用
    JedisCluster 中的 psetex 方法用于设置一个键值对,并同时设置该键的过期时间(以毫秒为单位)。与 setex 的区别在于 psetex 接受的过期时间是以毫秒为单位,而 setex 接受的是以秒为单位。psetex方法说明方法签名:publicStringpsetex(Stringkey,longmilliseconds......
  • iOS Swift 集合类型 (Array、Set 和 Dictionary ) 与 元组
    语言提供数组(Array)、集合(Set)和字典(Dictionary)三种基本的集合类型用来存储集合数据。数组是有序数据的集。集合是无序无重复数据的集。字典是无序的键值对的集。Swift中的数组、集合和字典必须明确其中保存的键和值类型,这样就可以避免插入一个错误数据类型的值。同理,对于获......
  • 【题解】Solution Set - NOIP2024集训Day50 图的连通性相关
    【题解】SolutionSet-NOIP2024集训Day50图的连通性相关https://www.becoder.com.cn/contest/5618「JSOI2012」越狱老虎桥简述题意:题目大意:给定一张图,A先添加\(1\)条边,B再删去一条边使得图不连通,A要最大化删除边的权值,B要最小化删除边的权值,问最终的权值是多少。......
  • PHP unset() 函数的作用
    PHP中的unset()函数用于销毁指定的变量。具体来说,它会解除变量名与其数据之间的关联,从而释放该变量所占用的内存。不过需要注意的是,unset()并不是删除变量的内容,而是取消对变量名的引用。如果变量是数组中的某个元素或者对象中的某个属性,unset()也会将其从数组或对象中移......