一、Set集合去重
Set接口繼承了 Collection 接口,Set 集合中的元素不按特定的方式排序,並且沒有重複的元素。因此,可以使用 Set 接口來去除 List 中的重複元素。下面是示例代碼:
List list = new ArrayList(); list.add("apple"); list.add("banana"); list.add("banana"); list.add("orange"); Set set = new HashSet(); set.addAll(list); list.clear(); list.addAll(set); System.out.println(list);
輸出結果為: [orange, apple, banana]
上面的代碼中,我們首先定義了一個ArrayList,並向裡面添加了若干個元素,其中 banana 重複了兩次。接着,我們生成了一個 HashSet 集合,調用addAll()方法將 list 集合的元素添加到 HashSet 集合中,由於Set集合中不允許重複,因此就去重了。最後將去重後的Set集合元素以列表的形式返回到原來的 list 集合中。
二、Map去重
Map中的鍵是唯一的,因此我們可以使用Map來實現List去重,將重複的元素作為鍵,不存入值,最後將鍵以列表的形式輸出即可。
List list = new ArrayList(); list.add("apple"); list.add("banana"); list.add("banana"); list.add("orange"); Map map = new HashMap(); for (String str : list) { map.put(str, new Object()); } list.clear(); list.addAll(map.keySet()); System.out.println(list);
輸出結果為: [orange, apple, banana]
上面的代碼中,我們首先定義了一個ArrayList,並向裡面添加了若干個元素,其中 banana 重複了兩次。接着,我們生成了一個 HashMap 集合,並將 list 集合中的所有元素作為鍵,不存入值。由於HashMap中的鍵是唯一的,因此就去重了。最後將去重後的鍵以列表的形式返回到原來的 list 集合中。
三、使用Java 8 Lambda表達式去重
Java 8引入的 Lambda 表達式是一種更加簡潔方便的寫法,我們可以使用Lambda表達式來簡化List去重操作。
List list = new ArrayList(); list.add("apple"); list.add("banana"); list.add("banana"); list.add("orange"); list = list.stream().distinct().collect(Collectors.toList()); System.out.println(list);
輸出結果為: [orange, apple, banana]
上述代碼使用了 stream().distinct().collect(Collectors.toList()) 的語法,很容易理解,其中 stream 表示返回一個流,distinct()表示去重,collect(Collectors.toList())表示將流轉換成一個列表。
四、使用TreeSet去重
將List轉換成Set時,一般使用HashSet,但HashSet的順序是不可預測的。如果想讓去重後的List有一定的排序規則,可以使用 TreeSet。
List list = new ArrayList(); list.add("banana"); list.add("orange"); list.add("apple"); list.add("banana"); Set set = new TreeSet(); set.addAll(list); list.clear(); list.addAll(set); System.out.println(list);
輸出結果為: [apple, banana, orange]
上述代碼中,我們將List轉換成 TreeSet,並將去重後的元素添加到原來的List中。TreeSet 會為元素進行排序,所以最後的輸出結果是一個排序後的 List。
五、使用LinkedHashSet去重
LinkedHashSet 是 HashSet 的子類,在 HashSet 的基礎上為元素維護了插入順序,因此也可以用來去重並保留元素的順序。
List list = new ArrayList(); list.add("banana"); list.add("orange"); list.add("apple"); list.add("banana"); Set set = new LinkedHashSet(); set.addAll(list); list.clear(); list.addAll(set); System.out.println(list);
輸出結果為: [banana, orange, apple]
上述代碼中,我們將List轉換成 LinkedHashSet,並將去重後的元素添加到原來的List中。LinkedHashSet 會按元素插入的順序保留元素,並且去重。因此,最後的輸出結果是一個按照插入順序排序後的 List。
六、使用Apache Commons Collections去重
Apache Commons Collections 是一個開源的 Java 類庫,提供了一系列的數據結構和算法的實現,可以用來拓展 Java 的集合框架。這個集合庫中也提供了一些去重操作的工具。下面是示例代碼:
List list = new ArrayList(); list.add("banana"); list.add("orange"); list.add("apple"); list.add("banana"); List results = new ArrayList(new LinkedHashSet(list)); System.out.println(results);
輸出結果為: [banana, orange, apple]
上述代碼中,我們使用了 Apache Commons Collections 的 LinkedHashSetList 類,它是一個鏈式散列集合,它維護元素插入的順序,並且不含重複元素。我們將原來的 List 傳入 LinkedHashSetList 中,即可實現去重並保留元素的順序。
原創文章,作者:OHTOW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/329963.html