温馨提示×

Java set去重如何处理null值

小樊
89
2024-11-27 15:10:17
栏目: 编程语言

在Java中,使用Set集合去重时,如果需要处理null值,可以使用以下方法:

  1. 使用HashSet:

HashSet集合会自动过滤掉重复元素,包括null值。因此,只需将集合转换为HashSet即可实现去重。

import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("A");
        set.add(null);
        set.add("B");
        set.add(null);
        set.add("A");

        System.out.println("Set without duplicates: " + set);
    }
}

输出结果:

Set without duplicates: [A, null, B]
  1. 使用LinkedHashSet:

LinkedHashSet会保留元素的插入顺序,同时也会过滤掉重复元素,包括null值。

import java.util.LinkedHashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<>();
        set.add("A");
        set.add(null);
        set.add("B");
        set.add(null);
        set.add("A");

        System.out.println("Set without duplicates: " + set);
    }
}

输出结果:

Set without duplicates: [A, null, B]
  1. 使用自定义类并实现equals()hashCode()方法:

如果需要根据自定义类的属性进行去重,可以在自定义类中实现equals()hashCode()方法。这样,Set集合会根据这两个方法的返回值来判断元素是否重复。在这种情况下,需要注意处理null值。

import java.util.Objects;
import java.util.Set;
import java.util.LinkedHashSet;

class MyClass {
    private String property;

    public MyClass(String property) {
        this.property = property;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MyClass myClass = (MyClass) o;
        return Objects.equals(property, myClass.property);
    }

    @Override
    public int hashCode() {
        return Objects.hash(property);
    }
}

public class Main {
    public static void main(String[] args) {
        Set<MyClass> set = new LinkedHashSet<>();
        set.add(new MyClass("A"));
        set.add(null);
        set.add(new MyClass("B"));
        set.add(null);
        set.add(new MyClass("A"));

        System.out.println("Set without duplicates: " + set);
    }
}

输出结果:

Set without duplicates: [MyClass{property='A'}, null, MyClass{property='B'}]

这样,Set集合就可以根据自定义类的属性进行去重,同时处理null值。

0