我有以下课程:
package menu;
import java.util.List;
public class Menu
{
private String titulo;
private List<String> opciones;
public Menu(String titulo, List<String> opciones)
{
this.titulo = titulo;
this.opciones = opciones;
}
public void mostrar()
{
System.out.println();
System.out.println(titulo);
for (int i = 0; i < opciones.size(); i++)
{
System.out.println(i + 1 + ". " + opciones.get(i));
}
System.out.println();
}
}
在该方法中,main
我创建了两个变量,如下所示:
import java.util.Arrays;
import java.util.List;
import menu.Menu;
public class Principal
{
public static void main(String[] args)
{
String tituloMenu = "Menú Principal";
List<String> opcionesMenu = Arrays.asList("Jugar", "Ver instrucciones", "Salir");
//resto del código
}
}
我的问题是我正在寻找一种更简单的方法来初始化opcionesMenu
. 我初始化所述变量的方式是通过研究 SO 获得的,但是我无法得出结论是否可以ArrayList
初始化 C# 样式:
var opcionesMenu = new List<string> { "Jugar", "Ver instrucciones", "Salir" };
另一个问题是我不太了解ArrayList
我在前面代码中的初始化是如何工作的。基本上我有两个问题:为什么有必要使用Arrays
?以及使用该方法究竟意味着什么asList
?
提前感谢您可能的评论和/或回复。
让我们分部分来理解您提出的每个问题。
在 java 中,有几个选项可以获取实现接口的对象实例
List
并将“初始”数据插入其中,这是变量的数据类型opcionesMenu
。但是每一个都取决于你想要达到的目标,因为每一个都有它的特点。1 - 使用运算符
new
。这个变体是经典或传统的,也是最冗长的,有时有点烦人。
Arrays
2 - 从使用类(您使用的方法)的数组中。如果您已经有一个包含要插入到列表中的元素的外部数组,或者如果您想节省一些代码,例如对第
add()
1 点中方法的连续调用,则此选项可能很有用。另一方面,您必须非常清楚并始终在场,获得的列表如下:一个。它的大小是固定的,因此您无法从中添加或删除项目。两个操作都抛出一个类型的异常
UnsupportedOperationException
。湾。如果使用变体 1,则结果列表将是原始数组的视图,这意味着,例如,如果我们对列表进行排序,则数组将以相同的方式排序。
3 - 使用接口的工厂方法
List
(从 Java 9 开始)。这些方法也可以在接口Set
和Map
这个选项允许我们以非常不冗长的方式创建一个列表。这与我们使用类非常相似,但是如果我们从界面中创建一个列表而不是使用类,
Arrays
则更容易理解我们正在创建的是一个列表,这往往与使用数组相关联。 . 此外,我们必须知道我们获得的列表是不可变的,因此在第 2 点中,我们将无法添加或删除元素,但与上述点不同的是,我们也无法对其执行排序等操作. 我们只能用它来查询它(将元素放在一个位置,通过它等)。List
Arrays
类的使用
Arrays
不是强制性的。发生的情况是,在 Java 9 集合的工厂方法到来之前,我们必须从一组有限的预定义元素中获取列表的最简洁的选项是使用asList
所述类的方法。在上面的第 2 点中,我解释了这种方法的使用及其特点。不必使用 Arrays 类。您可以使用列表,例如 ArrayList 类。
传统的喂养方式是:
我会通过你那个班级的联赛:
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
您还可以使用数组本身并避免列表:
我不知道这对你来说是否容易。
问候。