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版本。

相关推荐
开开心心就好7 小时前
吾爱大佬原创的文件时间修改工具
安全·智能手机·pdf·电脑·智能音箱·智能手表·1024程序员节
开开心心就好5 天前
近200个工具的电脑故障修复合集
安全·智能手机·pdf·电脑·consul·memcache·1024程序员节
数据皮皮侠AI7 天前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
计算机毕业论文辅导10 天前
物联网实战:基于MQTT协议的智能家居数据传输系统设计与实现
1024程序员节
开开心心就好10 天前
支持批量处理的视频分割工具推荐
安全·智能手机·rust·pdf·电脑·1024程序员节·lavarel
liuyao_xianhui12 天前
Linux开发工具结尾 _make
linux·运维·服务器·数据结构·哈希算法·宽度优先·1024程序员节
学传打活14 天前
【边打字.边学昆仑正义文化】_21_爱的结晶(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
数据皮皮侠AI21 天前
顶刊同款!中国地级市风灾风险与损失数据集(2000-2022)|灾害 / 环境 / 经济研究必备
大数据·人工智能·笔记·能源·1024程序员节
Fab1an22 天前
Busqueda——Hack The Box 靶机
linux·服务器·学习·1024程序员节
技术专家23 天前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节