我们创建一个Set为:
Set myset = new HashSet()
我们如何在Java中创建一个列表?
我们创建一个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中。