您的位置:

Java 数组转 Set

一、Set 和数组的概念

在 Java 中,Set 是一种不允许重复元素的 Collection 集合。和 List 不同,Set 不保证元素的顺序。而数组是一种特殊的数据结构,它可以容纳固定数量的元素,这些元素可以是不同的数据类型。

二、为什么需要将数组转成 Set

将数组转成 Set 可以非常方便地去掉数组中的重复元素,因为 Set 只保留不同的元素,将数组转成 Set 可以去重。此外,很多情况下需要将数组中的元素添加到 Collection 集合中,此时需要先将数组转成 Set,然后再将 Set 中的所有元素添加到 Collection 集合中。

三、使用 Java 自带类库将数组转成 Set

Java 提供了 HashSet 和 TreeSet 两个类来实现 Set 集合。我们可以调用这两个类的构造函数,将数组作为参数传入。

1. 使用 HashSet

public static <T> Set<T> arrayToSet(T[] arr) {
    return new HashSet<>(Arrays.asList(arr));
}

以上方法的具体实现是将数组传入 Arrays.asList() 方法,该方法会返回一个 List<T> 对象,然后再将该 List 对象作为参数传入 HashSet 的构造函数中,创建一个 HashSet 对象。

2. 使用 TreeSet

public static <T> Set<T> arrayToSet(T[] arr) {
    Set<T> set = new TreeSet<>();
    Collections.addAll(set, arr);
    return set;
}

以上方法的具体实现是先创建一个空的 TreeSet 对象,然后通过 Collections.addAll() 方法将数组中的元素添加到 TreeSet 中,添加时会自动去重。注意:使用 TreeSet 时需保证数组中所有元素的类型都实现了 Comparable 接口,否则会抛出 ClassCastException 异常。

四、自定义方式将数组转成 Set

除了使用 Java 自带类库外,我们也可以自定义方式将数组转成 Set,这里提供两种实现方式。

1. 使用 LinkedHashSet

public static <T> Set<T> arrayToSet(T[] arr) {
    Set<T> set = new LinkedHashSet<>();
    for (T element : arr) {
        set.add(element);
    }
    return set;
}

以上方法使用 LinkedHashSet 实现,它是 HashSet 的一个子类,并且它可以保证元素的插入顺序和维护顺序一致。

2. 使用 Stream API

public static <T> Set<T> arrayToSet(T[] arr) {
    return Arrays.stream(arr)
            .collect(Collectors.toSet());
}

以上方法使用 Java 8 中的 Stream API 实现,它可以将数组转成 Stream 流,在使用 Collectors.toSet() 方法将流中的所有元素转成 Set。