Arrays.asList() vs Collections.singletonList()

简介: 看了 IDEA 的告警:与 Collections.singletonList 比,使用 Arrays.asList 来生成一个list是否更有优势?后者还能使得返回的list不可变。

看了 IDEA 的告警:

8.png

与 Collections.singletonList 比,使用 Arrays.asList 来生成一个list是否更有优势?后者还能使得返回的list不可变。


‎将 Collections.emptyList 或 Collections.singletonList的调用替换为对 Arrays.asList的调用。


当项目或模块使用JDK9时


替换为对 java.util.List.of的调用

Collections.emptySet或 Collections.singleton调用替换为 java.util.Set.of

Collections.emptyMap或 Collections.singletonMap调用替换为 java.util.Map.of

当项目或模块低于JDK9时,分别替换为


com.google.common.collect.ImmutableList


com.google.common.collect.ImmutableSet


com.google.common.collect.ImmutableMap


Collections.singletonList(sth)

不可变


Arrays.asList(sth)是 Array 的固定大小的 List 表示,其中 List 和 Array 在堆中连接


Arrays.asList(something) 允许对其进行非结构性更改,这会反映到 List 和联合数组。尽管您可以为特定索引设置元素,但它会抛UnsupportedOperationException 来添加、删除元素


对 Collections.singletonList(something) 返回的列表所做的任何更改都将导致 UnsupportedOperationException。


Collections.singletonList(something) 返回的 List 的容量将始终为 1


Arrays.asList(something) 的容量将是支持数组的大小


singletonList不受数组的支持,而只是对该项目的引用。据推测,它会占用更少的内存,并且可能很重要,具体取决于您要创建的列表数量。


Arrays.asList 方法返回由指定数组支持的固定大小的列表。该方法返回 ArrayList 的实例,它是扩展 AbstractList 而不是 java.util.ArrayList 的私有嵌套静态类。这个静态类提供了一些方法的实现,例如set、indexOf、forEach、replaceAll 等,但是当我们调用 add 时,它没有自己的实现,而是调用了来自 AbstractList 的方法,它抛出了 java.lang.UnsupportedOperationException。


Collections.singletonList 返回一个仅包含指定对象的不可变列表,并且它也是可序列化的。


对于不可变列表,通常使用 Collections.unmodifiableList ,它返回指定列表的不可修改视图。


不可修改的视图集合是不可修改的集合,也是支持集合的视图。请注意,对支持集合的更改可能仍然是可能的,并且如果发生更改,它们将通过不可修改的视图可见。我们可以在 Java 10 及更高版本中拥有一个真正的不可变列表。


参考

https://stackoverflow.com/questions/26027396/arrays-aslist-vs-collections-singletonlist

目录
相关文章
Arrays.asList、ArrayList.subList使用规范
Arrays.asList、ArrayList.subList使用规范
|
7月前
|
Java API Apache
Arrays.asList():使用指南
Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合。这个方法可以作为数组和集合之间的桥梁,方便我们使用集合的一些方法和特性。本文将给大家介绍 Arrays.asList() 的语法、应用场景、坑点和总结。
92 0
|
7月前
Arrays.asList的坑
Arrays.asList的坑
33 0
|
7月前
|
Java C++
List.of() Vs Arrays.asList()
在上面的示例中,List.of() 用于创建不可变的颜色列表。任何通过添加或删除元素来修改列表的尝试都将导致抛出异常。 Arrays.asList() 当我们想要由指定数组支持的固定大小(可序列化)集合时,请使用此方法。对返回集合的任何更改也将写入原始数组。 java
39 0
|
8月前
|
Java
Arrays.asList()方法 讲解
Arrays.asList()方法 讲解
33 0
|
9月前
|
Java 编译器 索引
深入解析Java中的数组复制:System.arraycopy、Arrays.copyOf和Arrays.copyOfRange
当涉及到在Java中处理数组时,有许多方法可供选择,其中一些包括`System.arraycopy()`、`Arrays.copyOf()`和`Arrays.copyOfRange()`。这些方法允许您在不同的数组之间复制数据,但它们之间有一些细微的差异。在本篇博客文章中,我们将深入探讨这些方法,以便您了解何时使用它们以及如何正确使用它们。
282 1
|
8月前
|
Java 索引
CTO:在项目中使用Arrays.asList、ArrayList.subList,就立马滚
1. 使用Arrays.asList的注意事项 1.1 可能会踩的坑 先来看下Arrays.asList的使用:
|
Java API
Arrays.asList注意事项
Arrays.asList注意事项
|
C++ 存储 Java
Arrays.copyOf()与System.arraycopy()的区别
Arrays.copyOf()与System.arraycopy()的区别
150 0
Arrays.copyOf()与System.arraycopy()的区别
|
安全 Java API
Arrays.asList 解析
快速学习方法的定义 | 学习笔记
84 0