我们创建一个 Set
集合,如下所示:
Set myset = new HashSet()
在Java中如何创建List
?
我们创建一个 Set
集合,如下所示:
Set myset = new HashSet()
在Java中如何创建List
?
List myList = new ArrayList();
或者使用泛型(Java 7或更高版本)
List<MyType> myList = new ArrayList<>();
或使用泛型(旧版Java)
List<MyType> myList = new ArrayList<MyType>();
此外,如果您想创建一个包含内容的列表(尽管它将具有固定的大小):
List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");
让我总结并增加一些内容:
1. new ArrayList<String>();
2. Arrays.asList("A", "B", "C")
1. Lists.newArrayList("Mike", "John", "Lesly");
2. Lists.asList("A","B", new String [] {"C", "D"});
不可变列表
1. Collections.unmodifiableList(new ArrayList<String>(Arrays.asList("A","B")));
2. ImmutableList.builder() // Guava
.add("A")
.add("B").build();
3. ImmutableList.of("A", "B"); // Guava
4. ImmutableList.copyOf(Lists.newArrayList("A", "B", "C")); // Guava
空不可变列表
1. Collections.emptyList();
2. Collections.EMPTY_LIST;
字符列表
1. Lists.charactersOf("String") // Guava
2. Lists.newArrayList(Splitter.fixedLength(1).split("String")) // Guava
整数列表
Ints.asList(1,2,3); // Guava
Ints.asList
不会创建一个不可变列表,而是创建一个由给定整数数组支持的固定大小列表 (即它支持 List.set(int, Object)
方法)。"不可变字符列表" 的第二个例子也不是真正的不可变的(我会删掉那一行)。 - Grzegorz Rożniecki创建一个非空的固定大小列表(不支持添加、删除等操作):
List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported
创建一个非空的可变列表:
List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));
使用新的List.of(...)
静态工厂方法:
List<Integer> immutableList = List.of(1, 2);
List<Integer> mutableList = new ArrayList<>(List.of(3, 4));
使用局部变量类型推断:
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!
首先阅读这篇文章,然后再阅读这篇和这篇文章。通常情况下,你将使用其中的两种实现之一。
实际上,只需阅读Sun关于集合框架的指南就可以了。
ArrayList
。如果我只处理列表的两端,那么我会使用双端队列(或队列),并使用 ArrayDeque
实现。原因是尽管基于数组的实现可能会浪费一些空槽(当我无法预测所需容量时),但对于小集合来说,这与链表(或双端队列)中所有节点实例的开销相当。而且作为回报,我可以获得随机访问。LinkedList
提供了什么独特的好处? - ericksonList<String> list = new ArrayList<>();
固定大小列表的定义如下:
List<String> list = Arrays.asList("foo", "bar");
List<String> list = ImmutableList.of("foo", "bar");
List
是一个像 Set
一样的接口,并且有 ArrayList
和 LinkedList
作为通用实现。
我们可以这样创建 List:
List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
我们也可以创建一个固定大小的列表:
List<String> list = Arrays.asList("A", "B", "C");
通常情况下,我们使用ArrayList
而不是LinkedList
实现:
LinkedList
在有大量元素时,需要占用大量的空间,并且性能表现不佳。LinkedList
中的任何索引操作都需要O(n)的时间,而ArrayList
只需要O(1)的时间。Arrays.asList
创建的列表无法进行结构修改,但其元素仍然可以修改。
根据文档,方法Collections.unmodifiableList
返回指定列表的不可修改视图。 我们可以像这样获取它:
Collections.unmodifiableList(Arrays.asList("A", "B", "C"));
如果我们使用的是Java 9,则:
List<String> list = List.of("A", "B");
如果我们使用的是 Java 10,则方法 Collectors.unmodifiableList
将返回 Java 9 中引入的真正不可修改的列表实例。有关 Collections.unmodifiableList
与 Collectors.unmodifiableList
在Java 10中差异的更多信息,请参见此答案。
//simple example creating a list form a string array
String[] myStrings = new String[] {"Elem1","Elem2","Elem3","Elem4","Elem5"};
List mylist = Arrays.asList(myStrings );
//getting an iterator object to browse list items
Iterator itr= mylist.iterator();
System.out.println("Displaying List Elements,");
while(itr.hasNext())
System.out.println(itr.next());
以下是创建列表的一些方法。
java.lang.UnsupportedOperationException
异常。 List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
List<String> fixedSizeList = Arrays.asList("Male", "Female");
List<String> fixedSizeList = List.of("Male", "Female"); //from java9
下面的版本是一个简单的列表,您可以添加/删除任意数量的元素。 List<String> list = new ArrayList<>();
以下是在Java中创建LinkedList
的方法。如果您需要频繁插入/删除元素,请使用LinkedList
而不是ArrayList
。
List<String> linkedList = new LinkedList<>();
Arrays.asList("男性", "女性")
。 - Johny