Java程式連線兩個列表


簡介

在Java中,列表是有序的元素集合,允許重複。有時,我們可能需要將兩個列表合併成一個列表。連線兩個列表意味著將兩個列表的元素連線起來,形成一個包含兩個列表所有元素的新列表。在Java中,有多種方法可以連線兩個列表,包括使用迴圈、和內建方法。在本例中,我們將探討在Java中連線兩個列表的不同方法。

一種方法是使用List介面提供的addAll()方法。此方法將一個列表的所有元素新增到另一個列表中。另一種方法是使用Java 8提供的Stream API,使用flatMap()和collect()方法連線兩個列表。

另一種方法是使用HashSet從第一個列表中刪除重複項,然後將第二個列表的所有元素新增到其中。最後,我們可以使用接受Collection作為引數的ArrayList建構函式將連線的元素轉換回List。

方法

有幾種方法可以執行連線操作

  • 使用addAll()方法

  • 使用流

  • 使用union()

方法1:使用addAll()

addAll()是Java中的一種方法,它將集合的所有元素新增到另一個集合中。

方法

  • 首先,建立兩個ArrayList(list1和list2),並用一些字串元素初始化它們。

  • 然後,建立一個新的ArrayList concatenatedList,其元素與list1相同,方法是將list1作為引數傳遞給ArrayList建構函式。

  • 使用addAll()方法將list2的所有元素新增到concatenatedList的末尾。這將導致list1和list2的連線。

  • 最後,使用System.out.println()方法將連線後的列表列印到控制檯。

示例

這是一個使用addAll()方法連線兩個列表的Java程式示例:

import java.util.ArrayList;
import java.util.List;

public class ConcatenateLists {
   public static void main(String[] args) {
      // Create the first list
      List<String> list1 = new ArrayList<>();
      list1.add("apple");
      list1.add("banana");
      list1.add("orange");

      // Create the second list
      List<String> list2 = new ArrayList<>();
      list2.add("grape");
      list2.add("kiwi");
      list2.add("melon");

      // Concatenate the two lists
      List<String> concatenatedList = new ArrayList<>(list1);
      concatenatedList.addAll(list2);

      // Print the concatenated list
      System.out.println("Concatenated list: " + concatenatedList);
   }
}

解釋

此程式建立兩個字串列表(list1和list2),然後使用addAll()方法將它們連線到一個新的列表(concatenatedList)中。addAll()方法將list2中的所有元素新增到concatenatedList的末尾。請注意,我們將list1傳遞給ArrayList建構函式以建立一個與list1具有相同元素的新列表。這確保了list1中元素的順序在連線的列表中得以保留。

輸出

Concatenated list: [apple, banana, orange, grape, kiwi, melon]

方法2:使用流

流是Java API,允許對集合進行函式式操作,提供並行處理和惰性求值。

方法

  • 首先,建立兩個ArrayList(list1和list2),並用一些字串元素初始化它們。

  • Stream介面的concat()方法用於連線兩個列表。此方法接受兩個流作為輸入,並返回一個包含輸入流所有元素的新流。

  • 為了使用concat()方法,我們需要使用stream()方法將兩個列表轉換為流。在這裡,我們使用list1.stream()和list2.stream()將list1和list2轉換為流。

  • 然後,使用Collectors類的collect()方法將生成的流收集到列表中。Collectors類的toList()方法用於將流的元素收集到新的List中。

  • 最後,使用System.out.println()方法將連線後的列表列印到控制檯。

示例

這是一個使用流連線兩個列表的Java程式示例:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ConcatenateListsUsingStream {
   public static void main(String[] args) {
      // Create the first list
      List<String> list1 = new ArrayList<>();
      list1.add("apple");
      list1.add("banana");
      list1.add("orange");

      // Create the second list
      List<String> list2 = new ArrayList<>();
      list2.add("grape");
      list2.add("kiwi");
      list2.add("melon");

      // Concatenate the two lists using streams
      List<String> concatenatedList = Stream.concat(list1.stream(), list2.stream())
      .collect(Collectors.toList());

      // Print the concatenated list
      System.out.println("Concatenated list: " + concatenatedList);
   }
}

解釋

此程式使用Stream介面的concat()方法連線兩個列表。concat()方法接受兩個流作為輸入,並返回一個包含輸入流所有元素的新流。然後,使用Collectors類的collect()方法將生成的流收集到列表中。

請注意,為了使用流,我們需要匯入Stream和Collectors類。

這種方法的優點是比以前的方法更簡潔,但對於大型列表,它可能效率不高,因為它會建立一個新的流和一個新的列表來儲存連線的元素。

輸出

Concatenated list: [apple, banana, orange, grape, kiwi, melon]

方法3:使用Union()

union()是Java中的一種方法,它返回兩個集合的並集,包含兩個集合中的所有不同元素。

方法

  • 建立兩個ArrayList(list1和list2),並用一些字串元素初始化它們。

  • 使用其建構函式(接受Collection作為引數)從list1建立一個HashSet。這會自動從list1中刪除任何重複項,並將唯一元素儲存在HashSet中。

  • 使用HashSet的addAll()方法將list2的所有元素新增到集合中。這也確保了list2中的任何重複項都會自動刪除。

  • 然後,使用接受Collection作為引數的ArrayList建構函式將連線的元素轉換回ArrayList。此建構函式建立了一個與原始集合具有相同順序的新ArrayList。

  • 最後,使用System.out.println()方法將連線後的列表列印到控制檯。

示例

這是一個使用Set介面的union()方法連線兩個列表的Java程式示例:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ConcatenateListsUsingUnion {
   public static void main(String[] args) {
      // Create the first list
      List<String> list1 = new ArrayList<>();
      list1.add("apple");
      list1.add("banana");
      list1.add("orange");

      // Create the second list
      List<String> list2 = new ArrayList<>();
      list2.add("grape");
      list2.add("kiwi");
      list2.add("melon");

      // Concatenate the two lists using the union() method
      Set<String> set = new HashSet<>(list1);
      set.addAll(list2);
      List<String> concatenatedList = new ArrayList<>(set);

      // Print the concatenated list
      System.out.println("Concatenated list: " + concatenatedList);
   }
}

解釋

  • 此程式使用union()方法連線兩個列表。union()方法接受兩個集合作為輸入,並返回一個包含輸入集合所有元素的新集合。

  • 在這裡,我們使用HashSet從list1建立一個集合,然後使用addAll()方法將list2的所有元素新增到集合中。最後,使用接受Collection作為引數的ArrayList建構函式將連線的元素轉換回ArrayList。

  • 請注意,使用Set可以保證結果列表中沒有重複項。

  • 這種方法的優點是簡單且高效,因為Set操作的平均時間複雜度為O(1)。但是,它可能不會保留原始列表中元素的順序。

輸出

Concatenated list: [banana, orange, apple, kiwi, grape, melon]

結論

  • 在Java中連線兩個列表是程式設計中的常見任務,有多種方法可以實現這一點。選擇哪種方法取決於各種因素,包括列表的大小、是否需要刪除重複項以及所需的效能和記憶體需求。

  • 在本例中,我們探討了在Java中連線兩個列表的三種不同方法。我們使用了List介面提供的addAll()方法、Java 8提供的Stream API,以及HashSet從第一個列表中刪除重複項,然後將第二個列表的所有元素新增到其中。最後,我們使用接受Collection作為引數的ArrayList建構函式將連線的元素轉換回List。

更新於:2024年5月31日

7000+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.