在 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) {
// 创建数组列表
ArrayList<Integer> araylist = new ArrayList<>();
// 在数组列表中添加元素
araylist.add(1);
araylist.add(2);
araylist.add(1);
araylist.add(0);
araylist.add(9);
araylist.add(6);
// 使数组列表不可修改
Collection<Integer> newArrayLst
= Collections.unmodifiableCollection(araylist);
// 尝试添加新元素
newArrayLst.add(5); // 此行将引发错误
System.out.println("列表元素:");
// 循环遍历元素
for (Integer print : newArrayLst) {
// 打印元素
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) {
// 创建数组列表
ArrayList<Integer> araylist = new ArrayList<>();
// 在数组列表中添加元素
araylist.add(1);
araylist.add(2);
araylist.add(1);
araylist.add(0);
araylist.add(9);
araylist.add(6);
// 使数组列表不可修改
Collection<Integer> newArrayLst
= Collections.unmodifiableCollection(araylist);
System.out.println("列表元素:");
// 循环遍历元素
for (Integer print : newArrayLst) {
// 打印元素
System.out.println(print);
}
}
}
输出
列表元素 : 1 2 1 0 9 6
示例 3
在此示例中,我们将展示如何使用 for-each 循环遍历不可修改的 TreeSet 集合。
import java.util.*;
public class TreeStExample {
public static void main(String args[]) {
// 创建树集
TreeSet<String> treeSt = new TreeSet<>();
// 在树集中添加元素
treeSt.add("Tutorix");
treeSt.add("Simply");
treeSt.add("Easy");
treeSt.add("Learning");
treeSt.add("Tutorials");
treeSt.add("Point");
// 使 TreeSet 不可修改
Collection<String> newTreeSt
= Collections.unmodifiableCollection(treeSt);
System.out.println("TreeSet 中的元素:");
// 迭代不可修改的 TreeSet
for (String print : treeSt) {
// 打印元素
System.out.println(print);
}
}
}
输出
Elements in the TreeSet: Easy Learning Point Simply Tutorials Tutorix
结论
在本文中,我们了解了可修改和不可修改集合,以及如何使用 Collections.unmodifiableCollection() 方法将可修改集合更改为不可修改集合。与可修改集合相比,不可修改集合的内存效率更高。此外,我们还了解了如何使用 for-each 循环遍历不可修改集合的元素。
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

