zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
    

    输出结果
    这里写图片描述

  • 相关阅读:
    Truevision3D
    Django模版渲染后在浏览器中出现空行的问题解决<转>
    python日期函数<转>
    web应用程序概述
    汉诺塔(hanoi)递归实现
    django1.4配置静态文件路径
    服务器端的状态维护
    树的存储结构表示
    WEB服务器端应用程序开发相关概念
    HTTP消息
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6770136.html
Copyright © 2011-2022 走看看