Java ArrayList nCopies 相关的一个小坑

Java,有一段再正常再普通不过的代码竟然没有执行,翻错误日志,查,这段代码上面listA.set(0, "b");如此简单的一行竟然抛了Exception java.lang.UnsupportedOperationException

查该list的初始化代码,listA = Collections.nCopies(5, "a");,点进去,看nCopies说明,Returns an immutable list consisting of n copies of the specified object.,原来这是个不可变list,不仅仅是set方法,add等方法也是抛错的。

如果需要给一个指定长度的list赋初始化默认值,(然后再修改其中个别值),又不想用for这种很low的方式,该怎么办?

其实,nCopies还是可以使用的,应该这样用:

1
2
3
4
List<String> listA = new ArrayList<>();
listA.addAll(Collections.nCopies(5, "a"));
listA.set(0, "b");
System.out.println(listA);

输出:
[b, a, a, a, a]