簡體   English   中英

添加到不重復的鏈表(util)

[英]Add to linked list (the util) without duplicates

我正在使用這個工具: import java.util.LinkedList; 在 Java 中。 我想知道是否有一種方法可以添加 2 個鏈接列表而不允許重復(例如 python 中的集合)或者是否有內置的 function 可以從該實用程序中刪除重復項?

如果答案是否定的,有沒有辦法顯式地編寫一個 function 來從這個工具中刪除重復項?

謝謝!

您可以使用java 8 stream來獲取唯一值。

new_list = Stream.concat(list1.stream(), list2.stream())
  .distinct()
  .collect(Collectors.toList());

這里list1list2都保持不變

如果您不想允許重復並且不一定需要實現 java.util.List 接口,則可能需要考慮使用 java.util.LinkedHashSet 代替。 這個 Set 將保持元素的順序並且不允許重復。 如果您有要轉換的列表,只需使用 LinkedList 作為構造函數參數創建一個新的 LinkedHashSet。

遍歷第二個列表的元素以檢查每個元素是否包含在第一個列表中是一項昂貴的操作,因此您可能希望避免這樣做。

使用 LinkedHashSet 的主要優點是您可以獲得 Set 功能並保持元素的順序。 LinkedHashSet 的主要缺點是不能根據其 position 按元素查詢集合,因為這不是 Set 接口中定義的方法,LinkedHashSet 沒有實現 List 接口。 此外,在創建新對象時,您最終將創建一個新列表(或集合),而不是修改當前列表。

假設您有兩個 LinkedList 實例 list1 和 list2,您可以執行以下操作:

Set<?> linkedSet = new LinkedHashSet<>(list1);
linkedSet.addAll(list2);
list1 = new LinkedList(linkedSet);

如果您真的只想添加到第一個列表的實例,那么您可以執行類似的操作:

Set<?> linkedSet = new LinkedHashSet<>(list1);
linkedSet.addAll(list2);
list1.clear();
list1.addAll(linkedSet);

創建 LinkedHashSet 不是一項昂貴的操作,並且 contains() 方法在恆定時間內運行(即不依賴於集合的大小),因此檢查元素是否已包含在原始集合中通常不會花費太多時間時間,尤其是當您的列表包含很多元素時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM