无序,不允许重复
public interface Set
extends Collection 没有新方法
-boolean add(E e);向集合中追加元素e对象,如果出现重复则后添加数据直接丢弃如果进行对象相等比较:
-首先调用当前对象所属类中的hashCode方法获取当前对象的hashCode值
-按照hashCode值进行比较,
-如果hashCode值不相等,则不会调用equals方法,直接得出结论两个对象不相等
-如果hashCode值相等,才调用equals方法进行进一步判断
-如果equals为真则判断两个对象相等潜规则:
java要求当两个对象的equals为true时,要求两个对象的hashCode值相等。
hashCode值相等并不一定equals为true
实现类:
- HashSet
- TreeSet
- LinkedHashSet
- import java.util.HashSet;
- import java.util.Objects;
- import java.util.Set;
-
- public class Test1 {
- public static void main(String[] args) {
- Set set=new HashSet();
- set.add(new A1(99L, "wangwu"));
- set.add(new A1(88L, "lisi"));
- set.add(new A1(99L, "zhangsan"));
- set.forEach(System.out::println);
- }
- }
-
- class A1{
- private Long id;
- private String name;
-
- @Override
- public int hashCode() {
- System.out.println(this+"::hashcode()");
- return id.hashCode();
- }
- //比较规则为:按照id进行比较,如果id相等则对象相等
- public boolean equals(Object obj) {
- System.out.println(this+"::equals()");
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- A1 other = (A1) obj;
- return Objects.equals(id, other.id);
- }
- public A1(Long id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public String toString() {
- return "A1 [id=" + id + ", name=" + name + "]";
- }
- }