在Java中初始化一个列表
Java.util.List 是 Collection 的子接口。它是可以存储重复值的对象的有序集合。由于 List 保留了插入顺序,它允许元素的位置访问和插入。 List 接口由 ArrayList、LinkedList、Vector 和 Stack 类实现。
List 是一个接口,可以通过以下方式创建 List 的实例:
List a = new ArrayList();
List b = new LinkedList();
List c = new Vector();
List d = new Stack();
以下是初始化列表的以下方法:
使用 List.add() 方法
由于 list 是一个接口,因此无法直接实例化它。但是,可以创建已实现此接口的那些类的对象并实例化它们。
很少有实现 List 接口的类是Stack、ArrayList、LinkedList、Vector等。
句法:
List
list=new ArrayList (); List llist=new LinkedList (); List stack=new Stack (); 例子:
import java.util.*; import java.util.function.Supplier; public class GFG { public static void main(String args[]) { // For ArrayList List
list = new ArrayList (); list.add(1); list.add(3); System.out.println("ArrayList : " + list.toString()); // For LinkedList List llist = new LinkedList (); llist.add(2); llist.add(4); System.out.println("LinkedList : " + llist.toString()); // For Stack List stack = new Stack (); stack.add(3); stack.add(1); System.out.println("Stack : " + stack.toString()); } } 输出:ArrayList : [1, 3] LinkedList : [2, 4] Stack : [3, 1]
双大括号初始化也可以用来做上述工作。
句法:
List
list=new ArrayList (){{ add(1); add(2); add(3); }}; 例子:
import java.util.*; public class GFG { public static void main(String args[]) { // For ArrayList List
list = new ArrayList () {{ add(1); add(3); } }; System.out.println("ArrayList : " + list.toString()); // For LinkedList List llist = new LinkedList () {{ add(2); add(4); } }; System.out.println("LinkedList : " + llist.toString()); // For Stack List stack = new Stack () {{ add(3); add(1); } }; System.out.println("Stack : " + stack.toString()); } } 输出:ArrayList : [1, 3] LinkedList : [2, 4] Stack : [3, 1]
使用 Arrays.asList()
- 创建不可变列表
Arrays.asList()从数组创建一个不可变列表。因此它可以用来实例化一个带有数组的列表。
句法:
List
list=Arrays.asList(1, 2, 3); 例子:
import java.util.Arrays; import java.util.List; public class GFG { public static void main(String args[]) { // Instantiating List using Arrays.asList() List
list = Arrays.asList(1, 2, 3); // Print the list System.out.println("List : " + list.toString()); } } 输出:List : [1, 2, 3]
- 创建可变列表
句法:
List
list=new ArrayList<>(Arrays.asList(1, 2, 3)); 例子:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class GFG { public static void main(String args[]) { // Creating a mutable list using Arrays.asList() List
list = new ArrayList<>( Arrays.asList(1, 2, 3)); // Print the list System.out.println("List : " + list.toString()); list.add(5); // Print the list System.out.println("Modified list : " + list.toString()); } } 输出:List : [1, 2, 3] Modified list : [1, 2, 3, 5]
- 创建不可变列表
使用 Collections 类方法
Collections 类中有多种方法可用于实例化列表。他们是:
使用 Collections.addAll()
Collections类有一个静态方法addAll()可用于初始化列表。 Collections.addAll()在使用要插入元素的 Collection 指定之后接收任意数量的元素。
句法:
List
list = Collections.EMPTY_LIST; Collections.addAll(list = new ArrayList (), 1, 2, 3, 4); 例子:
import java.util.*; public class GFG { public static void main(String args[]) { // Create an empty list List
list = new ArrayList (); // Instantiating list using Collections.addAll() Collections.addAll(list, 1, 2, 3, 4); // Print the list System.out.println("List : " + list.toString()); } } 输出:List : [1, 2, 3, 4]
使用 Collections.unmodifiableList()
Collections.unmodifiableList()返回一个无法更改的列表,即它既不能添加也不能删除元素。任何修改列表的尝试都将导致 UnsupportedOperationExample。
句法:
List
list = Collections .unmodifiableList(Arrays.asList(1, 2, 3)); 示例 1:
import java.util.*; public class GFG { public static void main(String args[]) { // Creating the list List
list = Collections.unmodifiableList( Arrays.asList(1, 2, 3)); // Print the list System.out.println("List : " + list.toString()); } } 输出:List : [1, 2, 3]
示例 2:
import java.util.*; public class GFG { public static void main(String args[]) { try { // Creating the list List
list = Collections.unmodifiableList( Arrays.asList(1, 2, 3)); // Print the list System.out.println("List : " + list.toString()); // Trying to modify the list System.out.println("Trying to modify the list"); list.set(0, list.get(0)); } catch (Exception e) { System.out.println("Exception : " + e); } } } 输出:List : [1, 2, 3] Trying to modify the list Exception : java.lang.UnsupportedOperationException
使用 Collections.singletonList()
Collections.singletonList()返回一个只包含一个元素的不可变列表。
句法:
List
list = Collections.singletonList(2); 示例 1:
import java.util.*; public class GFG { public static void main(String args[]) { // Creating the list List
list = Collections.singletonList(2); // Print the list System.out.println("List : " + list.toString()); } } 输出:List : [2]
使用Java 8 流
随着Java 8 中 Stream 和函数式编程的引入,现在可以构造任何对象流,然后将它们收集为一个列表。
句法:
1. List
list = Stream.of(1, 2, 3) .collect(Collectors.toList()); 2. List list = Stream.of(1, 2, 3) .collect(Collectors.toCollection(ArrayList::new)); 3. List list = Stream.of(1, 2, 3, 4) .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList)); 例子:
import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; public class GFG { public static void main(String args[]) { // Creating a List using Syntax 1 List
list1 = Stream.of(1, 2, 3) .collect(Collectors.toList()); // Printing the list System.out.println("List using Syntax 1: " + list1.toString()); // Creating a List using Syntax 2 List list2 = Stream .of(3, 2, 1) .collect( Collectors .toCollection(ArrayList::new)); // Printing the list System.out.println("List using Syntax 2: " + list2.toString()); // Creating a List using Syntax 3 List list3 = Stream .of(1, 2, 3, 4) .collect( Collectors .collectingAndThen( Collectors.toList(), Collections::unmodifiableList)); // Printing the list System.out.println("List using Syntax 3: " + list3.toString()); } } 输出:List using Syntax 1: [1, 2, 3] List using Syntax 2: [3, 2, 1] List using Syntax 3: [1, 2, 3, 4]
使用Java 9 List.of()
Java 9 引入了 List.of() 方法,该方法接受任意数量的参数并从中构造一个紧凑且不可修改的列表。
句法:
List
unmodifiableList = List.of(1, 2, 3); 例子:
import java.util.List; public class GFG { public static void main(String args[]) { // Creating a list using List.of() List
unmodifiableList = List.of(1, 2, 3); // Printing the List System.out.println("List : " + unmodifiableList.toString()); } } 输出:
[1, 2, 3]