zoukankan      html  css  js  c++  java
  • Java19-hashSet

    HashSet的特点:

    • 它是无序的,即添加的顺序和遍历出来的顺序是不同的
    • 它里面不允许有重复元素,是因为它是基于HashMap实现的
    • 实现了Set接口,由哈希表(实际上是一个HashMap实例)支持
    • 底层数据结构是哈希表

    如何将自定义类对象存入HashSet进行去重呢?

    • 类中必须重写hashCode()方法和equals()方法

    • equals()方法中比较所有属性

    • hashCode()方法要保证属性相同的对象返回值相同, 属性不同的对象尽量不同,对象的成员变量值相同即为同一个元素

     以上来源:https://blog.csdn.net/colinchen1996/article/details/77887539

    ---------------------------------------实践---------------------------------------------

    Person类

    package testHashSet;
    
    public class Person {
        public String name;
        public int age;
        public Person(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 int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Person other = (Person) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
    }

    测试代码:

    package testHashSet;
    
    import java.util.HashSet;
    
    public class testHashSet {
        public static void main(String[] args) {
            HashSet hashSet = new HashSet();
            hashSet.add(new Person("王一",1));
            hashSet.add(new Person("王一",1));
            hashSet.add(new Person("张三",11));
            hashSet.add(new Person("张三",1));
            hashSet.add(new Person("李二",2));
            hashSet.add(new Person("李二",2));
            System.out.println(hashSet);
            
            
        }
    
    }

    输出结果:

    [Person [name=李二, age=2], Person [name=张三, age=1], Person [name=张三, age=11], Person [name=王一, age=1]]
    • 它是无序的,即添加的顺序和遍历出来的顺序是不同的
    • 重写了hashCode()方法和equals()方法,不允许出现重复元素
  • 相关阅读:
    《骆驼祥子》
    《基督山伯爵》
    JDeveloper 假死问题
    JSP代码执行顺序
    Ajax简单案例(实现提交值到服务器值不刷新页面)
    JS和JSP之间值传递
    如何更好的编码
    Telnet 便捷执行脚本
    MyBatis 缓存
    MyBatis 中传递多个参数的 4 种方式
  • 原文地址:https://www.cnblogs.com/eosclover/p/13605918.html
Copyright © 2011-2022 走看看