我们创建一个Set为:

Set myset = new HashSet()

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


当前回答

先读这个,再读这个和这个。十有八九你会使用这两种实现之一。

事实上,只需阅读Sun的集合框架指南即可。

其他回答

使用谷歌Collections,您可以在Lists类中使用以下方法

import com.google.common.collect.Lists;

// ...

List<String> strings = Lists.newArrayList();

List<Integer> integers = Lists.newLinkedList();

对于变量参数初始化和从Iterable<T>初始化有重载。

这些方法的优点是,您不需要像使用构造函数那样显式地指定泛型参数——编译器将根据变量的类型推断出它。

List list = new ArrayList();

或者使用泛型

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

当然,你也可以用任何类型的变量替换字符串,比如Integer。

在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<String> list = new ArrayList<String>(){
  {
   add("a");
   add("b");
  }
};

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中。