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

相关推荐
开开心心就好11 天前
内存清理软件灵活设置,自动阈值快捷键清
运维·服务器·windows·pdf·harmonyos·risc-v·1024程序员节
学传打活13 天前
【边打字.边学昆仑正义文化】_5_宇宙物种创造简史(1)
微信公众平台·1024程序员节·汉字·昆伦正义文化
xcLeigh14 天前
打破机房围墙:VMware+cpolar构建跨网络虚拟实验室
vmware·内网穿透·cpolar·实验室·远程访问·1024程序员节
开开心心就好15 天前
免费轻量电子书阅读器,多系统记笔记听书
linux·运维·服务器·安全·ddos·可信计算技术·1024程序员节
unable code16 天前
流量包取证-大流量分析
网络安全·ctf·misc·1024程序员节·流量包取证
开开心心就好16 天前
实用PDF擦除隐藏信息工具,空白处理需留意
运维·服务器·windows·pdf·迭代器模式·桥接模式·1024程序员节
unable code17 天前
浏览器取证-[GKCTF 2021]FireFox Forensics
网络安全·ctf·misc·1024程序员节·浏览器取证
unable code17 天前
内存取证-[安洵杯 2019]Attack
网络安全·ctf·misc·1024程序员节·内存取证
unable code18 天前
CTF-SPCS-Forensics
网络安全·ctf·misc·1024程序员节·取证