HashSet集合

HashSet集合简介

  • java.util.HashSet是Set接口的一个实现类,
  • 存储的元素是不可重复,且无序的
  • HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有很好的存储和找出的性能

什么是哈希值?

是一个十进制的整数,由系统随机给出。代指对象的地址值,是模拟出来的,不是数据实际存储的物理地址。

Object类有一个方法,int hashCode()返回该对象的哈希码值。

Set集合存储元素不重复的原理

set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法。只有这2个方法都为false的时候,元素才会被存储进Set集合。

我们自定义的对象要存储到set集合中去,要保证不重复,必须重写hashCode和equals方法。

import java.util.HashSet;

public class SetDemo {
    public static void main(String[] args) {
        HashSet<Person> ha = new HashSet<>();
        ha.add(new Person(18));
        ha.add(new Person(19));
        ha.add(new Person(18));
        System.out.println(ha);
    }
}

// 重写hashSet 和equals方法来判断,元素相同
class Person {
    private int age;


    public int getAge() {
        return age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;

        Person person = (Person) o;

        return age == person.age;
    }

    @Override
    public int hashCode() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                '}';
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person() {
    }

    public Person(int age) {
        this.age = age;
    }
}

注意:LinkedHashSet,存储的元素是有序的

猜你喜欢

转载自www.cnblogs.com/wurengen/p/10540170.html