怎么使用Collections_fill一键填充List集合为指定元素

风杰姑娘_1564

风杰姑娘_1564

2026-04-04

670人浏览

原创

collections.fill() 不扩容,只覆盖现有元素;空 arraylist 填不满,需先初始化长度;仅适用于固定大小、批量赋相同值的场景,且要求列表可修改、类型匹配、注意引用共享问题。

怎么使用collections_fill一键填充list集合为指定元素

为什么 Collections.fill() 填不满你新建的 ArrayList?

它根本不会扩容,只按现有索引位置赋值。如果你用 new ArrayList() 创建空集合,调用 Collections.fill(list, "a") 后 list 仍是空的——因为没元素可填。

必须先确保 list 已有确定大小(比如用 Arrays.asList() 初始化,或提前 add() 足够多占位元素)。

  • 正确做法:先创建含 n 个 null 或默认值的 list,再 fill
  • 错误写法:new ArrayList<string>().fill(...)</string> —— ArrayList 没 fill() 方法,那是 Collections 的静态方法
  • 常见报错:IndexOutOfBoundsException,说明 list 长度为 0 或小于你要填的范围

Collections.fill() 的实际可用场景有哪些?

它适合「已有固定长度、只需批量覆盖值」的场合,比如初始化一个已知大小的缓存槽、重置某段日志缓冲区、填充测试用的等长数据桩。

  • 配合 Arrays.asList(new String[10]) 使用最稳妥:数组长度固定,转成 list 后可直接 fill
  • 不能用于 LinkedList 性能敏感场景:它会遍历索引,LinkedList 的 get(i) 是 O(n),整体变 O(n²)
  • 对 ArrayList 安全,底层是数组,随机访问快

示例:

List<string> list = new ArrayList(Collections.nCopies(5, null));
Collections.fill(list, "default"); // → ["default", "default", ..., 5 个]</string>

填不满、填错位置?检查这三个参数细节

Collections.fill() 只接受两个参数:List 和 obj,不支持起始/结束索引。想填部分区域?它做不到——得手写循环或用 subList().fill()(但 subList 返回的是视图,fill 会影响原 list)。

  • 传入的 list 必须是可修改的(Arrays.asList() 返回的 list 支持 set,但不支持 add/remove;Collections.unmodifiableList() 会抛 UnsupportedOperationException)
  • 元素类型要匹配:往 List<integer></integer> 里 fill "abc" 会编译失败(泛型擦除后运行时可能出 ClassCastException)
  • 如果 list 包含 null,fill 后 null 被替换;如果原 list 有真实值,那些值会被无条件覆盖

替代方案:什么时候不该硬用 Collections.fill()?

当你要生成新 list、或长度不确定、或需要函数式构造时,Collections.fill() 就不是最优解。

  • 初始化固定长度新 list:用 Stream.generate(() -> "x").limit(10).collect(Collectors.toList())
  • 填充不同值(如递增序号):必须循环或 stream map,fill() 只能塞同一个引用
  • 并发环境:Collections.fill() 不保证线程安全,list 本身得是线程安全实现(如 CopyOnWriteArrayList),且 fill 过程中不能被其他线程修改

真正容易被忽略的是:它操作的是引用。如果填的是可变对象(比如 new Date()),所有位置指向同一个实例——改一个,全部跟着变。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10157

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7302

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6412

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1104

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

908

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1336

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2669

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19991

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1195

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习