📜  在Java中初始化一个列表

📅  最后修改于: 2022-05-13 01:55:19.044000             🧑  作者: Mango

在Java中初始化一个列表

Java.util.List 是 Collection 的子接口。它是可以存储重复值的对象的有序集合。由于 List 保留了插入顺序,它允许元素的位置访问和插入。 List 接口由 ArrayList、LinkedList、Vector 和 Stack 类实现。

列表接口java

List 是一个接口,可以通过以下方式创建 List 的实例:

List a = new ArrayList();
List b = new LinkedList();
List c = new Vector(); 
List d = new Stack(); 

以下是初始化列表的以下方法:

  1. 使用 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]
    
  2. 使用 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]
      
  3. 使用 Collections 类方法

    Collections 类中有多种方法可用于实例化列表。他们是:

    1. 使用 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]
      
    2. 使用 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
      
    3. 使用 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]
      
  4. 使用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]
    
  5. 使用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]