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()' 在其中存储一些元素。在使此集合不可修改后,我们将添加一个新元素,这将引发错误。

Open Compiler
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 集合的元素。

Open Compiler
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 集合。

Open Compiler
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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告