当前位置: 首页 > 面试题库 >

关于不可变列表(由Arrays.asList()创建)

路裕
2023-03-14
问题内容

当我们使用数组从数组创建列表时java.util.Arrays.asList(),该列表是不可变的。我只是想知道为什么当ListSetMap)的基本目的是具有动态大小并能够随意添加和删除元素时,为什么要创建一个不可变列表。当我们需要固定大小的数据结构时,我们选择数组;当我们需要动态数据结构时,我们选择ListSetMap等等。那么拥有不可变列表的目的是什么?我在做作业时遇到了这个问题。


问题答案:

当我们使用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)。



 类似资料:
  • 我有以下查询,我正在研究Java不可变类的概念,并得出以下分析。。 所有字段必须是私有的,最好是最终的 确保类不能被覆盖-使类成为最终类,或者使用静态工厂并保持构造函数私有 字段必须从构造函数/工厂填充 不要为字段提供任何setter 小心收集。使用Collections.unmodifiable*。 此外,集合应该只包含不可变对象 所有getter必须提供不可变对象或使用防御性复制 不要提供任何

  • 问题内容: 有一个对象列表。 使用它创建一个unmodifiableList。 我了解不支持添加/删除/设置操作。同时,它不是不变的,因为它引用了现有的可修改列表,并且每当对该列表进行更改时,这些更改也会反映出来。 这样就创建了一个不可变的列表。 由于使用了转换构造函数,因此创建了一个不可变的列表。无法执行添加/删除/设置操作,原始列表中的任何更改都不会反映在中。让我们假设对象也是不可变的。 现在

  • 我需要将可变列表对象转换为不可变列表。java中可能的方法是什么?

  • 问题内容: 我有一个集合和一个数组。我试图将数组转换为集合c2并执行操作,但这会抛出异常。我发现,类收益类和这个类继承自其实现抛出。 有什么办法可以删除元素?请帮忙 问题答案: 返回数组的包装器。此包装具有固定的大小,并直接由数组支持,因此对的调用将修改数组,而修改列表的任何其他方法都将引发。 要解决此问题,你必须通过复制包装器列表的内容来创建新的可修改列表。通过使用ArrayList带有的构造函

  • 我有一个Java/Kotlin互操作问题。一个Kotlin不可变列表被编译成一个普通的java.util.ArrayList,它是可变的! 静态编程语言(库): Java(消费者): 如何使我的 Kotlin 类从 Java 的角度来看也是完全不可变的?

  • 问题内容: 我有Java / Kotlin互操作问题。Kotlin不可变列表被编译为可变的普通java.util.ArrayList! Kotlin(图书馆): Java(消费者): 从Java的角度来看,如何也使我的Kotlin类完全不可变? 问题答案: 默认情况下,Kotlin中的所有非集合都是 编译时只读类型 ,但不是 不可变的 。请参见以下代码段: 要真正拥有一个不变的列表,请考虑Guav