📜  如何使 ArrayList 在Java中只读(1)

📅  最后修改于: 2023-12-03 14:51:49.260000             🧑  作者: Mango

如何使 ArrayList 在Java中只读

在Java中,ArrayList是一种非常常见的数据结构,它可以存储各种类型的对象,并且可以动态地添加或删除元素。但是,在某些情况下,我们希望将ArrayList声明为只读,以避免在程序运行时不必要地修改其内容。本文将介绍如何将ArrayList设置为只读。

方法一:使用Collections.unmodifiableList()方法

Collections类提供了一个unmodifiableList()方法,该方法可以将ArrayList转换为只读List。该方法返回一个新的只读List,其内容与原始ArrayList相同,但不能修改。下面是一个例子:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ReadOnlyArrayList {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        List<String> readOnlyList = Collections.unmodifiableList(list);

        // 尝试更改只读列表,会抛出UnsupportedOperationException异常
        try {
            readOnlyList.add("durian");
        } catch (UnsupportedOperationException ex) {
            System.out.println("UnsupportedOperationException caught");
        }
        
        // 输出只读列表
        System.out.println(readOnlyList);
    }
}

运行结果如下:

UnsupportedOperationException caught
[apple, banana, cherry]

从运行结果可以看出,尝试向只读列表中添加新元素会抛出UnsupportedOperationException异常,因此我们可以确保列表的内容不会被修改。

方法二:使用Java 9中的List.of()方法

从Java 9开始,List接口提供了一个of()方法,可以将一组元素快速创建为只读List。下面是一个例子:

import java.util.List;

public class ReadOnlyArrayList {
    public static void main(String[] args) {
        List<String> readOnlyList = List.of("apple", "banana", "cherry");

        // 尝试更改只读列表,会抛出UnsupportedOperationException异常
        try {
            readOnlyList.add("durian");
        } catch (UnsupportedOperationException ex) {
            System.out.println("UnsupportedOperationException caught");
        }
        
        // 输出只读列表
        System.out.println(readOnlyList);
    }
}

运行结果与前面相同。

总结

在Java中,我们可以通过Collections.unmodifiableList()方法或List.of()方法将ArrayList设置为只读。将ArrayList设置为只读可以确保程序运行时不会因意外的修改而导致不必要的错误,因此在编写代码时建议使用只读列表。