• HashSet集合


    HashSet特点

    1.无序,不允许重复(无序指元素顺序与添加顺序不一致,每次遍历出来的位置不是恒久不变的)
    2.HashSet通过调用hashCode()和equals方法来剔除重复
    3.HashSet底层使用的数据结构是哈希表
    4.HashSet有初始容量16,加载因子0.75.这两个参数都可以设置

    剔除重复原理

    • 当向集合中添加数据时,自动帮助调用hascode方法 获取hashcode,结果不相同 则认为是不同对象 添加到集合中 * 如果hashcode中相同 ,再去调用equals方法,再比较一下 来确保一定是同一个对象, 如果内容也相等(即Equals返回true) * 则认为两个对象完全相同,不添加到集合

    剔除规则:

    1.未重写时,HashSet默认是根据内存地址来去除重复的
    2.重写后,根据重写【hashCode()】和【equals()】方法来剔除重复

    练习:
    HashSet集合中放多个人类对象 Person 姓名 年龄 性别 ,要求 姓名和年龄相同 则是同一个对象,不允许放进集合

    person类

    package HashSet;
    //HashSet集合中放多个人类对象  Person 姓名  年龄 性别 ,要求 姓名和年龄相同 则是同一个对象,不允许放进集合
    public class Person {
        private String name;
        private int age;
        private String sex;
        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;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
        }
        public Person(String name, int age, String sex) {
            super();
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
        public Person() {
            super();
        }
    
    
        //要求 姓名和年龄相同 则是同一个对象,不允许放进集合
        @Override
        public int hashCode() {
            return this.name.hashCode()+this.age*31;
        }
        @Override
        public boolean equals(Object obj) {
            if(obj==null){
                return false;
            }
            if(obj==this){
                return true;
            }
            if(obj instanceof Person){
                Person person=(Person)obj;
                if(person.name.equals(person.name)&&this.age==person.age){
                    return true;
                }
            }
            return false;
        }
    }
    

    测试类

    package HashSet;
    
    import java.util.HashSet;
    
    public class Test {
        public static void main(String[] args) {
            HashSet set=new HashSet<>();
            set.add(new Person("李白",30,"male"));
            set.add(new Person("李白",30,"female"));
            set.add(new Person("王勃",30,"male"));
            System.out.println(set);
            //遍历输出
            for (Object object : set) {
                System.out.println(object);
            }
        }
    }
    

    输出结果
    这里写图片描述

  • 相关阅读:
    PHP循环控制语句中的“for”循环
    PHP循环控制语句之“do...while”
    PHP循环控制语句之“while”
    PHP跳出循环之“continue”
    PHP跳出循环之“break”
    PHP控制语句之“switch”语句
    PHP条件控制语句之“elseif语句”
    PHP控制语句之“if...else”语句
    PHP条件控制语句之“if语句”
    三元运算符
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6770136.html
Copyright © 2020-2023  润新知