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,存储的元素是有序的