Java程式獲取兩個TreeSet的並集和交集


TreeSet 是一個實現Set介面的類,在Java中。在TreeSet中,元素按排序順序儲存,因為它內部使用稱為二叉搜尋樹的排序平衡樹實現。TreeSet中的元素預設按升序儲存。並集包含兩個集合中的所有元素。交集包含兩個集合中都存在的元素。

在本節中,我們將討論如何使用Java獲取兩個TreeSet的並集和交集。

什麼是集合的並集和交集?

並集 - 集合的並集包含集合A、集合B或兩者中的所有元素。如果一個元素同時存在於兩個集合中,那麼我們只在結果並集中顯示一次。

A={1,2,3,4}
B={3,4,5}
A union B ={1,2,3,4,5}

交集 - 集合的交集包含兩個集合中都存在的元素。

A={1,2,3,4}
B={3,4,5}  	
A intersection B={3,4}

現在我們將深入瞭解Java提供的TreeSet的基本操作以及方法的語法和用法。

TreeSet的基本操作

這裡,我們將討論使用Java TreeSet類提供的內建方法可以在TreeSet上執行的基本操作。

add() - 此方法用於向TreeSet新增元素。它接受一個引數,基本上是儲存在TreeSet中的元素的型別。

treeSetObject.add(element)

remove() - 此方法用於從TreeSet中刪除元素。傳遞給此方法的元素將從TreeSet中刪除。

treeSetObject.remove("b"); // removes "b" from the set

clear() - 此方法用於清除TreeSet中的所有元素。

treeSetObject.clear(); // removes all elements from set

contains() - 此方法用於檢查作為引數傳遞的元素是否在TreeSet中存在。它返回布林值。如果元素存在,則返回true,否則返回false。

boolean val = treeSetObject.contains(‘b’); // checks ‘b’ is present and returns boolean value

isEmpty() - 此方法用於檢查TreeSet是否為空。它返回布林值。如果TreeSet為空,則返回true,否則返回false。

boolean val = treeSetObject.isEmpty(); // checks hashSet contains elements or not  

addAll() - 此方法用於將一組元素新增到其呼叫的另一個集合中。它接受一個集合型別的引數,從中它將元素新增到其呼叫的集合中。

colletion_1.addAll(collection_2);

retainAll() - 此方法用於保留兩個集合中都存在的元素,即它將呼叫此方法的集合與作為引數傳遞的集合進行比較。它返回一個布林值。如果呼叫它的集合被修改,則返回true,否則返回false。

boolean result  = collection_1.retainAll(collection_2);

現在,我們將詳細討論如何實現Java程式碼以查詢兩個TreeSets的並集和交集。

方法1:使用addAll()和retainAll()

在這種方法中,我們將使用Java提供的addAll()和retainAll()方法來查詢兩個TreeSets的並集和交集。

演算法

  • 使用Arrays.asList()將陣列元素轉換為列表,初始化兩個TreeSet,分別為s1和s2。

  • 將s1複製為並集TreeSet,並使用addAll()新增s2的所有元素,然後列印它。

  • 將s1複製為交集TreeSet,並使用retainAll()查詢s1和s2之間的公共元素,然後列印它。

示例

在這個例子中,我們建立了兩個樹物件s1、s2並用值初始化它們,然後我們在s1物件上建立一個名為“union”的TreeSet新物件,我們使用addAll()方法將s2中存在的元素新增到其中,以獲取s1和s2中存在的元素,這也就是兩個TreeSets s1和s2的並集。我們在s1物件上建立一個名為“intersection”的TreeSet新物件,我們使用retainAll()方法從s1和s2 TreeSets中獲取所有公共元素。

import java.util.*;

public class Main{
   public static void main(String[] args) {
      TreeSet<Integer> s1 = new TreeSet<>(Arrays.asList(2, 8, 7, 3));
      TreeSet<Integer> s2 = new TreeSet<>(Arrays.asList( 5, 2, 7));
      TreeSet<Integer> union = new TreeSet<>(s1);
      union.addAll(s2);
      System.out.println("Union Set : " + union);
      TreeSet<Integer> intersection = new TreeSet<>(s1);
      intersection.retainAll(s2);
      System.out.println("Intersection Set : " + intersection);
   }
}

輸出

Union Set : [2, 3, 5, 7, 8]
Intersection Set : [2, 7]

方法2:使用迭代語句

在這種方法中,我們將使用Java提供的for-each迴圈,遍歷兩個集合並將它們新增到另一個TreeSet中以獲取兩個TreeSets的並集。對於交集,我們遍歷兩個TreeSets並找到公共元素。

演算法

  • 使用Arrays.asList()將陣列元素轉換為列表,初始化兩個TreeSet s1、s2。

  • 建立一個空TreeSet並集,遍歷s1和s2的元素,並使用add()將它們新增到並集中。

  • 建立一個空TreeSet交集,遍歷s1並使用contains()查詢s2中存在的元素,如果元素存在,則使用add()將它們新增到交集TreeSet中。

  • 列印並集和交集TreeSets。

示例

在這個例子中,我們建立了兩個樹物件s1、s2並用值初始化它們,然後我們建立一個名為“union”的TreeSet新物件,並使用for-each迴圈將兩個集合s1和s2的所有元素新增到該集合中。然後我們建立一個名為“intersection”的新TreeSet,並使用for each迴圈遍歷s1,並檢查該元素是否在s2中,如果存在,則將其新增到“intersection”TreeSet中。然後我們列印這兩個TreeSets。

import java.util.*;

public class Main {
   public static void main(String[] args) {
      TreeSet<Integer> s1 = new TreeSet<>(Arrays.asList(2, 8, 7, 3));
      TreeSet<Integer> s2 = new TreeSet<>(Arrays.asList(5, 2, 7));
      TreeSet<Integer> union = new TreeSet<>();
      for (Integer element : s1) {
         union.add(element);
      }
      for (Integer element : s2) {
         union.add(element);
      }
      TreeSet<Integer> intersection = new TreeSet<>();
      for (Integer element : s1) {
         if (s2.contains(element)) {
            intersection.add(element);
         }
      }
      System.out.println("Union: " + union);
      System.out.println("Intersection: " + intersection);
   }
}

輸出

Union: [2, 3, 5, 7, 8]
Intersection: [2, 7]

因此,在這篇文章中,我們學習了使用Java查詢兩個TreeSets的並集和交集的不同方法。

更新於: 2024年6月26日

264 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告