我们创建一个Set为:

Set myset = new HashSet()

我们如何在Java中创建一个列表?


当前回答

你可以在这里使用双大括号初始化:

List<String> list = new ArrayList<String>(){
  {
   add("a");
   add("b");
  }
};

其他回答

在Java 8中

创建一个固定大小的非空列表(不支持添加、删除等操作):

List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported

创建一个非空的可变列表:

List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));

在Java 9中

使用一个新的List.of(…)静态工厂方法:

List<Integer> immutableList = List.of(1, 2);

List<Integer> mutableList = new ArrayList<>(List.of(3, 4));

在Java 10中

使用局部变量类型推断:

var list1 = List.of(1, 2);

var list2 = new ArrayList<>(List.of(3, 4));

var list3 = new ArrayList<String>();

并遵循最佳实践……

不要使用原始类型

从Java 5开始,泛型就成为了语言的一部分——你应该使用它们:

List<String> list = new ArrayList<>(); // Good, List of String

List list = new ArrayList(); // Bad, don't do that!

编程到接口

例如,编程到List接口:

List<Double> list = new ArrayList<>();

而不是:

ArrayList<Double> list = new ArrayList<>(); // This is a bad idea!

一个例子:

List somelist = new ArrayList();

您可以查看javadoc for List,并找到包含在java api中的List接口的所有已知实现类。

List和Set一样只是一个接口。

HashSet是Set的一种实现,它具有添加/查找/删除性能方面的某些属性,ArrayList是List的裸实现。

如果你看了相关接口的文档,你会发现“所有已知的实现类”,你可以决定哪一个更适合你的需求。

可能是数组列表。

在Java 9中,你可以执行以下操作来创建一个不可变的List:

List<Integer> immutableList = List.of(1, 2, 3, 4, 5);

List<Integer> mutableList = new ArrayList<>(immutableList);

List是一个类似Set的接口,它有ArrayList和LinkedList作为通用实现。

我们可以创建List为:

 List<String> arrayList = new ArrayList<>();
 List<String> linkedList = new LinkedList<>(); 

我们还可以创建一个固定大小的列表:

List<String> list = Arrays.asList("A", "B", "C");

我们几乎总是使用数组列表而不是LinkedList实现:

LinkedList为对象使用了大量的空间,当我们有很多元素时,它的性能很差。 与ArrayList中的O(1)相比,LinkedList中的任何索引操作都需要O(n)时间。 点击这个链接了解更多信息。

由数组创建的列表。上面的asList不能在结构上被修改,但它的元素仍然可以被修改。

Java 8

根据文档,Collections方法。unmodifiableList返回指定列表的不可修改视图。我们可以这样得到:

Collections.unmodifiableList(Arrays.asList("A", "B", "C"));

Java 9

如果我们使用Java 9,那么:

List<String> list = List.of("A", "B");

Java 10

如果我们使用的是Java 10,那么使用collections方法。unmodifiableList将返回一个在Java 9中引入的真正不可修改的列表实例。检查这个答案,以了解更多关于集合差异的信息。unmodifiableList vs collector。unmodifiableList在Java 10中。