Java 迭代不可修改的集合

Java 迭代不可修改的集合

作为一个程序员,我们一定开发过进行增删改查操作的应用程序。这里,CRUD指的是创建(Create)、读取(Read)、更新(Update)和删除(Delete)。可以进行这些操作的集合被称为可修改的集合。然而,我们有办法将集合变为不可修改的,这样就无法对原始集合进行任何更改。尽管我们无法修改元素,但仍然可以遍历此集合。要在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循环遍历不可修改集合的元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程