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

相关推荐
yBmZlQzJ18 小时前
财运到内网穿透域名解析技术机制与中立评估
运维·经验分享·docker·容器·1024程序员节
yBmZlQzJ20 小时前
内网穿透工具通过端口转发实现内外网通信
运维·经验分享·docker·容器·1024程序员节
数据皮皮侠AI1 天前
数字经济政策工具变量数据(2008-2023)
大数据·数据库·人工智能·笔记·1024程序员节
网安_秋刀鱼2 天前
【java安全】shiro反序列化1(shiro550)
java·开发语言·安全·web安全·网络安全·1024程序员节
unable code4 天前
攻防世界-Misc-Wire1
网络安全·ctf·misc·1024程序员节
开开心心就好4 天前
版本转换工具,支持Win双系统零售批量版
linux·运维·服务器·pdf·散列表·零售·1024程序员节
开开心心就好5 天前
免费卸载工具,可清理残留批量管理启动项
linux·运维·服务器·windows·随机森林·pdf·1024程序员节
unable code5 天前
攻防世界-Misc-4-1
网络安全·ctf·misc·1024程序员节
yBmZlQzJ7 天前
免费内网穿透-端口转发配置介绍
运维·经验分享·docker·容器·1024程序员节
金融小师妹8 天前
AI算法视角下非农夜冲击波来袭,黄金高位区间震荡态势的深度神经网络解析
大数据·深度学习·1024程序员节