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

Java 在一行中初始化ArrayList

连德义
2023-03-14
问题内容

我想创建用于测试目的的选项列表。首先,我这样做:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

然后,我将代码重构如下:

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

有一个更好的方法吗?


问题答案:

实际上,初始化的“最佳”方法可能ArrayList是你编写的方法,因为它无需以List任何方式创建新方法:

ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");

问题是引用该list实例需要大量输入。

还有其他选择,例如使用实例初始化程序(也称为“双括号初始化”)创建匿名内部类:

ArrayList<String> list = new ArrayList<String>() {{
    add("A");
    add("B");
    add("C");
}};

但是,我不太喜欢这种方法,因为最终得到的是ArrayList该类的一个子类具有实例初始化程序,并且创建该类只是为了创建一个对象-对我来说似乎有点过头了。

如果接受了针对Project Coin的Collection Literals提案(原定于Java 7中引入,但也不太可能成为Java 8的一部分),那将是一个很好的选择:

List<String> list = ["A", "B", "C"];

不幸的是,它不会在这里为你提供帮助,因为它将初始化一个不可变变量,List而不是一个ArrayList,并且,如果有的话,它尚不可用。



 类似资料:
  • 我想为测试目的创建一个选项列表。起初,我是这样做的: 然后,我重构代码如下: 有更好的方法吗?

  • 据我所知,在Java11中,这两个操作可以在一行中完成,不是吗?

  • 问题内容: 如何在Java中初始化? 我知道这是一个接口,可以使用或实现,但是在初始化时会出现错误的不兼容类型: 那我该如何进行呢? 问题答案: 用 或从Java 1.7开始

  • 问题内容: 我无法按照以下代码初始化列表: 我遇到以下错误: 无法实例化类型 我该如何实例化? 问题答案: 如果你检查API,则会注意到它说: 作为一种手段,它无法实例化(不可能)。 如果你检查该链接,则会发现一些实现的: 所有已知的实施类: 那些可以实例化。使用它们的链接来了解有关它们的更多信息,即IE:知道哪个更适合你的需求。 三种最常用的可能是: 奖励: 你还可以使用,以更简单的方式使用值实

  • 问题内容: 正如某些消息来源所说,Java实例初始化块在创建实例时或在构造函数之前立即执行。但是想象一下这种情况: 输出是(如预期的那样): 所以我的问题是-实例初始化块的正确定义是什么,因为它显然没有在构造函数之前执行,因为输出应该是 因为Main()构造函数是在调用super()之前调用的,所以Main初始化块应该是第一个。 问题答案: 不会。初始化块直接复制到构造函数中。显然那里也有一个隐式

  • 问题内容: 我知道当我初始化一个char数组时: 要么 为什么不喜欢 初始化数组: 为什么它们不同?它是Java哲学的本质之一还是其​​背后的某些原因? 问题答案: 如果您曾经使用过 C ,那么答案就非常简单。在 C语言中 ,创建数组的方式是在堆栈上分配一个足以容纳元素数量的静态内存长度,并使用指针指向第一个元素-或堆上动态内存长度,然后用指针指向第一个元素。 在 C ++中 ,第二个版本已更改为