溫馨提示×

Java set去重如何處理復雜對象

小樊
127
2024-11-27 15:39:16
欄目: 編程語言

在Java中,使用Set去重時,如果涉及到復雜對象,需要重寫對象的equals()和hashCode()方法。這是因為Set是基于這兩個方法來判斷對象是否相等的。以下是一個簡單的示例:

  1. 首先,創建一個復雜對象類,例如Person:
public class Person {
    private String name;
    private int age;

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

    // 重寫equals()方法
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }

    // 重寫hashCode()方法
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    // 添加getter和setter方法
    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;
    }
}
  1. 然后,在主類中使用Set去重:
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Set<Person> personSet = new HashSet<>();

        Person person1 = new Person("Alice", 30);
        Person person2 = new Person("Bob", 25);
        Person person3 = new Person("Alice", 30); // 與person1具有相同的屬性和值

        personSet.add(person1);
        personSet.add(person2);
        personSet.add(person3);

        System.out.println("PersonSet size: " + personSet.size()); // 輸出:PersonSet size: 2
    }
}

在這個示例中,我們創建了一個Person類,并重寫了equals()和hashCode()方法。這樣,當我們使用Set去重時,Set會根據這些方法來判斷對象是否相等。在這個例子中,person3與person1具有相同的屬性和值,但它們被視為不同的對象,因為它們的內存地址不同。因此,Set的大小為2。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女