关于不可变列表(由Arrays.asList()创建)
当我们使用数组从数组创建列表时java.util.Arrays.asList()
,该列表是不可变的。我只是想知道为什么当List
(Set
或Map
)的基本目的是具有动态大小并能够随意添加和删除元素时,为什么要创建一个不可变列表。当我们需要固定大小的数据结构时,我们选择数组;当我们需要动态数据结构时,我们选择List
或Set
或Map
等等。那么拥有不可变列表的目的是什么?我在做作业时遇到了这个问题。
回答:
当我们使用java.util.Arrays.asList()从数组创建列表时,该列表是可变的。
是和否:可以通过调用来修改列表
list.set(index, element);
但列表可能 进行 结构
修饰。这意味着不可能将元素添加到列表中或从列表中删除元素。原因很简单,因为列表仍受数组支持,并且数组的大小可能不会更改。
当我们需要固定大小的可变集合时,我们选择数组
这就是关键点这里:数组是
一个集合。该Arrays.asList
方法主要充当“数组世界”和“集合世界”之间的“桥梁”。
Arrays.asList
例如,该方法使您可以将数据传递给期望使用的方法Collection
:
// A method that expects a collection:void process(List<String> strings) { ... }
void call()
{
String array[] = new String[] { "A", "B", "C" };
// Pass the array (as a list) to the method:
process(Arrays.asList(array));
}
该应用案例包括从数组创建其他集合。例如,如果您有一个数组并想创建一个Set
包含该数组中元素的数组,则可以
String array[] = new String[] { "A", "B", "C" };Set<String> set = new HashSet<String>();
for (String s : array)
{
set.add(s);
}
但是使用该Arrays.asList
方法,可以更方便地完成此操作:
Set<String> set = new HashSet<String>(Arrays.asList(array));
Arrays.asList
可以说该方法与Collection#toArray方法的对等方法相反,后者以相反的方向工作(尽管此方法通常涉及创建和填充
新 数组,而该Arrays.asList
方法只是“包装”一个数组并使它“看起来像” a List
)。
以上是 关于不可变列表(由Arrays.asList()创建) 的全部内容, 来源链接: utcz.com/qa/405500.html