arrylist怎么让他变得不可修改

在Java中,要将一个 ArrayList变得不可修改,你可以使用以下几种方法:

###1. 使用 Collections.unmodifiableList

Java 提供了 Collections.unmodifiableList 方法,可以生成一个不可修改的视图。这种方式返回的列表将不允许添加、删除或更新元素,但底层的原始列表仍然可以修改。

java 复制代码
import java.util.Collections;  
import java.util.List;  

public class UnmodifiableExample {  
 public static void main(String[] args) {  
 List<String> modifiableList = new ArrayList<>();  
 modifiableList.add("1");  
 modifiableList.add("2");  
 modifiableList.add("3");  

 // 创建不可修改的列表 List<String> unmodifiableList = Collections.unmodifiableList(modifiableList);  

 System.out.println(unmodifiableList); // 输出: [1,2,3]  

 // 异常:UnsupportedOperationException // unmodifiableList.add("4");  
 }  
}

###2. 使用 List.of 方法(Java9及以上)

如果你使用的是Java9或更高版本,可以直接使用 List.of 方法创建一个不可修改的列表。这种列表在创建后就不能进行任何修改操作。

java 复制代码
public class ImmutableListExample {  
 public static void main(String[] args) {  
 List<String> immutableList = List.of("1", "2", "3");  
 System.out.println(immutableList); // 输出: [1,2,3]  

 // 异常:UnsupportedOperationException // immutableList.add("4");  
 }  
}

###3. 自定义集合类如果你需要对集合的行为进行更精细的控制,可以自定义一个不可修改的列表类。在这个类中,你可以只暴露只读的方法,而隐藏其他修改方法。

java 复制代码
import java.util.List;  

public class ImmutableArrayList<T> {  
 private final List<T> list;  

 public ImmutableArrayList(List<T> list) {  
 this.list = new ArrayList<>(list); //复制列表,防止外部修改 }  

 public T get(int index) {  
 return list.get(index);  
 }  

 public int size() {  
 return list.size();  
 }  

 // 不提供添加、删除元素的方法}

###4. 使用 java.util.Setjava.util.Map

在需要不变性(immutable)的情况下,使用其他不变的数据结构(如 SetMap)也可以。在 Java9 中提供了 Set.of(...)Map.of(...) 方法。

java 复制代码
public class ImmutableSetExample {  
 public static void main(String[] args) {  
 Set<String> immutableSet = Set.of("1", "2", "3");  

 System.out.println(immutableSet); // 输出: [1,2,3]  

 // 异常:UnsupportedOperationException // immutableSet.add("4");  
 }  
}

结要让 ArrayList变得不可修改,最常见的方式是使用 Collections.unmodifiableList 或 Java9 引入的 List.of 方法。选择合适的方法依赖于你的具体需求和 Java版本。

相关推荐
unable code20 小时前
攻防世界-Misc-pdf
网络安全·ctf·misc·1024程序员节
第七序章1 天前
【C + +】C + + 11(中)——Lambda 表达式 + 可变参数模板
c语言·c++·算法·1024程序员节
qq19257230271 天前
23种设计模式
设计模式·1024程序员节
美狐美颜sdk1 天前
直播美颜SDK特效功能实战:从API调用到效果调优的全过程
人工智能·1024程序员节·美颜sdk·直播美颜sdk·第三方美颜sdk
码力引擎1 天前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
代码村新手2 天前
数据结构-链表
1024程序员节
第七序章2 天前
【C + +】C++11 (下) | 类新功能 + STL 变化 + 包装器全解析
c语言·数据结构·c++·人工智能·哈希算法·1024程序员节
努力学习的小廉2 天前
初识MYSQL —— 基本查询
数据库·mysql·1024程序员节
码力引擎2 天前
【零基础学MySQL】第四章:DDL详解
数据库·mysql·1024程序员节
少林码僧2 天前
1.1 大语言模型调用方式与函数调用(Function Calling):从基础到实战
人工智能·ai·语言模型·自然语言处理·llm·1024程序员节