一、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。
原創文章,作者:BVGKX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372851.html