Arrays.asList()为什么不能remove?

简介: Google Guava库提供了许多比较有用的工具类,可以尝试了解使用一下。

前几天在使用Arrays.asList方法的时候遇到一个问题:

与是去看了一下这个方法的源码,发现是返回的ArrayList呀,怎么会不支持remove操作呢?

后来仔细看了源码才发现,这个ArrayList并不是我们平常使用的java.util包下的ArrayList,而是Arrays类里面一个私有的内部类。这个内部类继承了AbstractList,但没有复写remove或者add等方法。所以它的长度不可变,这也与Arrays这个类的设计目的是契合的。


之所以用Arrays.asList()方法,是为了能够用尽量简洁的代码得到一个List。这在写单元测试的时候是很常见的需求。


在Java 9以后,可以使用List.of()方法来代替Arrays.asList()方法。但其内部也是返回的一个不可变的List:

但这里需要注意的是,两者还是有一些小区别的。比如,Arrays.asList()方法返回的List是可以进行set操作的,但List.of()的不可以。

如果想要用这种简洁性,又希望能够在后续添加或者删除元素,应该怎么办呢?可以自己写一个方法,类似于这样:

这种事情,当然已经有开源的库帮我们做啦!Google Guava提供了一个Lists类,里面有一些newArrayList方法:

Google Guava库提供了许多比较有用的工具类,可以尝试了解使用一下。

目录
相关文章
|
Java
【极问系列】springBoot集成elasticsearch出现Unable to parse response body for Response
【极问系列】springBoot集成elasticsearch出现Unable to parse response body for Response
1601 2
|
6月前
|
Java
Java 中 `toList()` 与 `collect(Collectors.toList())` 的微妙差异:别再乱用了!
Java 中 `toList()` 与 `collect(Collectors.toList())` 的微妙差异:别再乱用了!
525 0
|
9月前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
928 0
|
6月前
|
存储 人工智能 自然语言处理
企业AI知识库搭建指南
中关村科金得助智能企业知识库基于AI大模型,支持多格式文档上传与自动解析,具备智能问答、内容生成、精准搜索等功能,助力企业高效构建产品文档、技术手册、FAQ等知识体系。
|
6月前
|
存储 自然语言处理 监控
民航机场大模型私有知识库搭建步骤:技术选型 + 实施路径全解析!
近年来,民航机场面临知识管理难题,大模型技术为构建高效、安全的企业知识库提供了新思路。本文介绍知识库发展历程、大模型应用挑战,并详述私有化部署策略与八大实施步骤,助力民航提升运营效率与服务质量。
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
这篇文章讨论了Java单继承的设计原因,指出Java不支持多继承主要是为了避免方法名冲突等混淆问题,尽管Java类不能直接继承多个父类,但可以通过接口和继承链实现类似多继承的效果。
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
|
Java Spring
SpringBoot接收参数的方式
本文介绍了Java Spring Boot中处理GET请求的多种方式。可以使用方法参数直接接收,或者通过`@RequestParam`注解指定必传参数。此外,可以用实体类接收多个相关参数,但不能同时使用`@RequestParam`。还可以通过`HttpServletRequest`对象获取参数,或利用`@PathVariable`接收路径变量。对于数组和集合参数,需注意使用`@RequestParam`注解。
1441 1
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
1006 5
(详细图解过程) IDEA在创建类的的时候自动生成作者信息、时间等信息
这篇文章介绍了如何在IntelliJ IDEA中设置文件和代码模板,以便在创建新类时自动生成包含作者信息、日期和时间等信息的文件头。
(详细图解过程) IDEA在创建类的的时候自动生成作者信息、时间等信息
|
存储 人工智能 Java
如何用Java找出两个List中的重复元素,读这一篇就够了
在Java编程中,我们经常需要找出两个列表(List)中的重复元素。在本文中,我们将探讨三种方法来实现这一目标。