集合框架第21天(HashSet的存储过程及判断是为否重复元素)

HashSet

存储结构:哈希表(数组+链表+红黑树)
存储过程:
(1)根据HashCode计算保存的位置,如果此位置为空,则直接保存,如果不为空,则执行第二步
(2)执行equals方法,如果equals方法为true,则认为是重复值,否则将形成链表

注意:
image
元素出现重复,如果想让其判定为相同元素,那就需要重写HashCode和equals方法
HashCode方法重写:

@Override
    public int hashCode() {
        int n1 = this.name.hashCode();
        int n2 = this.age;
        return n1 + n2;
    }

equals方法重写:

@Override
    public boolean equals(Object o) {
        if (this == o) {	//判断是否相等
            return true;
        }
        if (o == null)		//判断是否为空
            return false;
        if (o instanceof Person) {
            Person p = (Person) o;
            if (this.name.equals(p.getName()) && this.age == p.getAge()) {
                return true;
            }
        }
        return false;
    }

以上两个方法重写后,将认为是同一个元素:
image
在idea中使用Alt+insert快捷键,选择equals()andHashCode()可快速重写
image

posted @ 2022-07-11 23:04  不再犹豫27  阅读(22)  评论(0)    收藏  举报