Java 中遍歷不可修改集合


作為程式設計師,我們肯定開發過執行 CRUD 操作的應用程式。這裡,CRUD 指的是建立、讀取、更新和刪除。可以執行這些操作的集合稱為可修改集合。但是,有一種方法可以使集合不可修改,以便無法對原始集合進行任何更改。儘管我們無法更改元素,但我們可以遍歷此集合。要遍歷 Java 中的不可修改集合,我們可以使用 for-each 迴圈或 iterator()。讓我們詳細討論一下。

Java 中遍歷不可修改集合

如前所述,如果我們無法透過任何方式修改集合的元素,則該集合被認為是不可修改的。但是,預設情況下,所有集合類都是可修改的。不用擔心,Java 提供了一種使集合不可修改的方法,為此我們可以使用 Collections.unmodifiableCollection() 方法,該方法接受可修改集合作為引數並返回不可修改的檢視。

語法

Collection<Type>instance=Collections.unmodifiableCollection(collection_name);

這裡,

Type 指定不可修改集合的型別,但它必須與原始可修改集合匹配。

collection_name 指定可修改集合的例項。

instance 描述新不可修改集合的引用。

使用不可修改集合的一個好處是,它比可修改集合更節省記憶體,因為它不需要維護修改的詳細資訊。如果我們嘗試直接或使用 iterator() 進行任何更改,我們將遇到 java.lang.UnsupportedOperationException。

示例 1

以下示例說明了如果我們嘗試向不可修改的 ArrayList 集合新增新元素會發生什麼。我們首先建立一個 ArrayList 類的例項,並使用內建方法 'add()' 在其中儲存一些元素。在使此集合不可修改後,我們將新增一個新元素,這將引發錯誤。

import java.util.*;
public class ArrayObj {
   public static void main(String[] args) {
      // Creating arraylist 
      ArrayList<Integer> araylist = new ArrayList<>();
      // Adding elements in arraylist
      araylist.add(1);
      araylist.add(2);
      araylist.add(1);
      araylist.add(0);
      araylist.add(9);
      araylist.add(6);
      // making arraylist unmodifiable
      Collection<Integer> newArrayLst
         = Collections.unmodifiableCollection(araylist);
      // trying to add a new elements
      newArrayLst.add(5); // this line will throw error 
      System.out.println("Elements of the list : ");
      // loop to iterate through elements
      for (Integer print : newArrayLst) {
         // printing the elements
         System.out.println(print);
      }
   }
}

輸出

Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableCollection.add(Collections.java:1067)
at ArrayObj.main(ArrayObj.java:17)

示例 2

在以下示例中,我們將使用 for-each 迴圈遍歷不可修改的 ArrayList 集合的元素。

import java.util.*;
public class ArrayObj {
   public static void main(String[] args) {
      // Creating arraylist 
      ArrayList<Integer> araylist = new ArrayList<>();
      // Adding elements in arraylist
      araylist.add(1);
      araylist.add(2);
      araylist.add(1);
      araylist.add(0);
      araylist.add(9);
      araylist.add(6);
      // making arraylist unmodifiable
      Collection<Integer> newArrayLst
         = Collections.unmodifiableCollection(araylist);
      System.out.println("Elements of the list : ");
      // loop to iterate through elements
      for (Integer print : newArrayLst) {
         // printing the elements
         System.out.println(print);
      }
   }
}

輸出

Elements of the list : 
1
2
1
0
9
6

示例 3

在此示例中,我們將展示如何使用 for-each 迴圈遍歷不可修改的 TreeSet 集合。

import java.util.*;
public class TreeStExample {
   public static void main(String args[]) {
      // Creating tree set
      TreeSet<String> treeSt = new TreeSet<>();
      // Adding elements in tree set
      treeSt.add("Tutorix");
      treeSt.add("Simply");
      treeSt.add("Easy");
      treeSt.add("Learning");
      treeSt.add("Tutorials");
      treeSt.add("Point");
      // making TreeSet unmodifiable
      Collection<String> newTreeSt
         = Collections.unmodifiableCollection(treeSt);
      System.out.println("Elements in the TreeSet: ");
      // iterating over unmodifiable TreeSet 
      for (String print :  treeSt) {
         // printing the elements
         System.out.println(print);
      }
   }
}

輸出

Elements in the TreeSet: 
Easy
Learning
Point
Simply
Tutorials
Tutorix

結論

在本文中,我們學習了可修改和不可修改集合,以及如何使用 Collections.unmodifiableCollection() 方法將可修改集合更改為不可修改集合。與可修改集合相比,不可修改集合更節省記憶體。此外,我們還了解了如何使用 for-each 迴圈遍歷不可修改集合的元素。

更新於: 2023年8月17日

335 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告