当前位置: 首页 > news >正文

arrylist怎么让他变得不可修改

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

###1. 使用 Collections.unmodifiableList

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

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 方法创建一个不可修改的列表。这种列表在创建后就不能进行任何修改操作。


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

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(...) 方法。


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

http://www.lryc.cn/news/470560.html

相关文章:

  • SpringMVC实战(3):拓展
  • Vue应用中使用xlsx库实现Excel文件导出的完整指南
  • 【数据分析】Power BI的使用教程
  • 融合ASPICE与敏捷开发:探索汽车软件开发的最佳实践
  • 后台管理系统的通用权限解决方案(三)SpringBoot整合Knife4j生成接口文档
  • 保研考研机试攻略:python笔记(1)
  • 在浏览器中运行 Puppeteer:解锁新能力
  • Kafka消费者故障,出现活锁问题如何解决?
  • pytorch 交叉熵损失函数 BCELoss
  • 【进阶】面向对象之接口(多学三招)
  • linux上trace code的几种方法
  • 文件操作(1) —— 文件基础知识
  • 4K双模显示器7款评测报告
  • 2024.10.24华为(留学生)笔试题解
  • 基于neo4j的医疗问诊系统
  • java :String 类
  • 关于非中文或者url文本不换行的问题
  • LeetCode 热题 100之矩阵
  • YOlO系列——yolo v3
  • 基于Datawhale开源量化投资学习指南(11):LightGBM在量化选股中的优化与实战
  • Python4
  • springboot系列--web相关知识探索六
  • FreeSWITCH 简单图形化界面30 - 使用MYODBC时可能遇到的错误
  • 阿里云物联网的通信方式
  • 自由职业者的一天:作为小游戏开发者的真实工作日记
  • 【RL Latest Tech】分层强化学习:Option-Critic架构算法
  • 分布式数据库
  • MySQL(2)【库的操作】
  • python pip更换(切换)国内镜像源
  • 阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)