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.Set 或 java.util.Map

在需要不变性(immutable)的情况下,使用其他不变的数据结构(如 Set 或 Map)也可以。在 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版本。

相关推荐
张小姐的猫1 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
工业HMI实战笔记3 天前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Martina_03213 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长3 天前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节
燃烧的枫4 天前
Windows 下 YOLO11 Pose 的 TensorRT C++ 部署
windows·yolo·tensorrt·1024程序员节·yolo11-pose
AI日报派送佬4 天前
2026年11月02日 AI 行业日报|商汤开源 Loop-9B、Pika 发布 H3 Flex 音视频模型、Meta× 傅利叶推出人形机器人 Max
人工智能·微软·开源·音视频·openai·1024程序员节·ai日报
avi91114 天前
【AI教人】UnityEditor扩展Spine动画,Spine骨骼,预览Preview一切
spine·骨骼动画·1024程序员节·editor扩展·spine动画·spine骨骼
开开心心就好4 天前
网页图片批量下载工具,输入链接就保存
服务器·算法·leetcode·支持向量机·pdf·ocr·1024程序员节
Martina_03214 天前
AI生成的3D模型打印后沿层纹开裂?用6步检查方向、壁厚与填充
图像处理·人工智能·数学建模·3d·自然语言处理·游戏策划·1024程序员节