如何在Java中创建一个新的List

use*_*796 710 java collections list

我们创建一个Set:

Set myset = new HashSet()
Run Code Online (Sandbox Code Playgroud)

我们如何List在Java中创建?

Dan*_*ton 917

List myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

或者使用泛型(Java 7或更高版本)

List<MyType> myList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

或者使用泛型(旧的Java版本)

List<MyType> myList = new ArrayList<MyType>();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,ArrayList不是唯一的List - 而且,就问题而言,HashSet并不是唯一的Set. (64认同)
  • 我很惊讶没有人提到你可以在Java文档中查找列表界面来获得实现List的所有类的明确列表:http://docs.oracle.com/javase/7/docs/api /java/util/List.html (16认同)
  • 如果您使用IDE,您通常也可以在那里查看类型层次结构,这可能更方便.在Eclipse中,默认快捷方式是F4,在IDEA中,它是Ctrl + H. (5认同)
  • 对于Java 7和8,第二个显式类型参数<MyType>可以替换为<>. (5认同)

Aar*_*paa 437

此外,如果要创建包含内容的列表(尽管它将是固定大小):

List<String> messages = Arrays.asList("Hello", "World!", "How", "Are", "You");
Run Code Online (Sandbox Code Playgroud)

  • @Avron - 错误:它只是固定大小:你不能改变大小,但你可以改变内容(警告的警告?) (65认同)
  • 需要注意的是,这种类型的列表(由asList()返回的列表)是不可变的. (14认同)

Ser*_*hyk 174

让我总结并添加一些内容:

JDK

1. new ArrayList<String>();
2. Arrays.asList("A", "B", "C")
Run Code Online (Sandbox Code Playgroud)

番石榴

1. Lists.newArrayList("Mike", "John", "Lesly");
2. Lists.asList("A","B", new String [] {"C", "D"});
Run Code Online (Sandbox Code Playgroud)

不变的清单

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
Run Code Online (Sandbox Code Playgroud)

空不可变列表

1. Collections.emptyList();
2. Collections.EMPTY_LIST;
Run Code Online (Sandbox Code Playgroud)

字符列表

1. Lists.charactersOf("String")                                 // Guava
2. Lists.newArrayList(Splitter.fixedLength(1).split("String"))  // Guava
Run Code Online (Sandbox Code Playgroud)

整数列表

Ints.asList(1,2,3);                                             // Guava
Run Code Online (Sandbox Code Playgroud)

  • 不使用泛型为任何读取此内容的开发人员提供了一个非常"好"的示例. (8认同)

Ole*_*hov 46

在Java 8中

要创建固定大小的非空列表(不支持添加,删除等操作):

List<Integer> list = Arrays.asList(1, 2); // but, list.set(...) is supported
Run Code Online (Sandbox Code Playgroud)

要创建非空的可变列表:

List<Integer> list = new ArrayList<>(Arrays.asList(3, 4));
Run Code Online (Sandbox Code Playgroud)

在Java 9中

使用新的List.of(...)静态工厂方法:

List<Integer> immutableList = List.of(1, 2);

List<Integer> mutableList = new ArrayList<>(List.of(3, 4));
Run Code Online (Sandbox Code Playgroud)

在Java 10中

使用局部变量类型推断:

var list1 = List.of(1, 2);

var list2 = new ArrayList<>(List.of(3, 4));

var list3 = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

并遵循最佳做法......

不要使用原始类型

从Java 5开始,泛型已成为语言的一部分 - 您应该使用它们:

List<String> list = new ArrayList<>(); // Good, List of String

List list = new ArrayList(); // Bad, don't do that!
Run Code Online (Sandbox Code Playgroud)

程序到接口

例如,程序到List界面:

List<Double> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

代替:

ArrayList<Double> list = new ArrayList<>(); // This is a bad idea!
Run Code Online (Sandbox Code Playgroud)


Ada*_*icz 30

首先阅读本文,然后阅读本文此内容.10次​​中有9次你将使用这两种实现中的一种.

实际上,只需阅读Sun的集合框架指南.

  • 我甚至会添加"8次中的8次"你将使用ArrayList,只是因为它在9.9次中无关紧要. (11认同)

Ble*_*rta 21

//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());
Run Code Online (Sandbox Code Playgroud)


Vit*_*nko 21

从Java 7开始,您可以对通用实例创建进行类型推断,因此无需在赋值的右侧复制泛型参数:

List<String> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

固定大小的列表可以定义为:

List<String> list = Arrays.asList("foo", "bar");
Run Code Online (Sandbox Code Playgroud)

对于不可变列表,您可以使用Guava库:

List<String> list = ImmutableList.of("foo", "bar");
Run Code Online (Sandbox Code Playgroud)


Sor*_*anu 20

List就像Set一样是一个接口.

与HashSet类似,Set的实现具有关于添加/查找/删除性能的某些属性,ArrayList是List的裸实现.

如果您查看相应接口的文档,您将找到"所有已知的实现类",您可以决定哪一个更适合您的需求.

有可能是它的ArrayList.


i_a*_*ero 17

List是一个类似的接口Set,具有ArrayListLinkedList作为通用实现.

我们可以创建List作为:

 List<String> arrayList = new ArrayList<>();
 List<String> linkedList = new LinkedList<>(); 
Run Code Online (Sandbox Code Playgroud)

我们还可以创建一个固定大小的列表:

List<String> list = Arrays.asList("A", "B", "C");
Run Code Online (Sandbox Code Playgroud)

我们几乎总是使用ArrayList反对LinkedList实现:

  1. LinkedList 当我们有很多元素时,会为对象使用大量空间并且表现不佳.
  2. LinkedList与O(1)相比,任何索引操作都需要O(n)时间ArrayList.
  3. 请查看此链接以获取更多信息.

Arrays.asList上面创建的列表不能在结构上进行修改,但仍可以修改其元素.

Java 8

根据doc,该方法Collections.unmodifiableList返回指定列表的不可修改视图.我们可以得到它:

Collections.unmodifiableList(Arrays.asList("A", "B", "C"));
Run Code Online (Sandbox Code Playgroud)

Java 9

如果我们使用Java 9,那么:

List<String> list = List.of("A", "B");
Run Code Online (Sandbox Code Playgroud)

Java 10

如果我们在Java的10则该方法Collectors.unmodifiableList将返回在Java中9.检查推出了这款真正的不可修改的列表的实例回答了关于区别的详细信息Collections.unmodifiableList VS Collectors.unmodifiableList的Java 10.


Pau*_*des 9

List list = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

或者使用泛型

List<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

当然,您也可以使用任何类型的变量替换字符串,例如Integer.


Car*_*ter 9

有时 - 但很少 - 而不是新的ArrayList,您可能需要一个新的LinkedList.从ArrayList开始,如果你遇到性能问题和证据表明列表存在问题,并且大量添加和删除到该列表 - 然后 - 不是之前 - 切换到LinkedList并查看是否有所改进.但总的来说,坚持使用ArrayList,一切都会好的.


Ale*_*x B 7

一个例子:

List somelist = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

您可以查看Listjavadoc,并查找Listjava api附带的接口的所有已知实现类.


Ben*_*ngs 7

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

import com.google.common.collect.Lists;

// ...

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

List<Integer> integers = Lists.newLinkedList();
Run Code Online (Sandbox Code Playgroud)

varargs初始化和初始化有重载Iterable<T>.

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


小智 7

因为java中数组列表的声明就像

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable  
Run Code Online (Sandbox Code Playgroud)

您可以通过多种方式在 Java 中创建和初始化数组列表。

 1) List list = new ArrayList();

 2) List<type> myList = new ArrayList<>();

 3) List<type> myList = new ArrayList<type>();

 4) Using Utility class

    List<Integer> list = Arrays.asList(8, 4);
    Collections.unmodifiableList(Arrays.asList("a", "b", "c"));

 5) Using static factory method

    List<Integer> immutableList = List.of(1, 2);


 6) Creation and initializing at a time

    List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});



 Again you can create different types of list. All has their own characteristics

 List a = new ArrayList();
 List b = new LinkedList();
 List c = new Vector(); 
 List d = new Stack(); 
 List e = new CopyOnWriteArrayList();
Run Code Online (Sandbox Code Playgroud)


jp0*_*121 6

List<Object> nameOfList = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

你需要导入ListArrayList.


ang*_*her 6

作为选项,您可以使用双括号初始化:

List<String> list = new ArrayList<String>(){
  {
   add("a");
   add("b");
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 这是一项昂贵的操作.您正在此处创建ArrayList的匿名子类. (2认同)

Jac*_* G. 6

使用Java 9,您可以执行以下操作来创建不可变的 List:

List<Integer> immutableList = List.of(1, 2, 3, 4, 5);

List<Integer> mutableList = new ArrayList<>(immutableList);
Run Code Online (Sandbox Code Playgroud)


fat*_*jad 6

可以通过多种方式创建列表:

1 - 构造函数初始化

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

List<Integer> list=new ArrayList<Integer>();
List<Integer> llist=new LinkedList<Integer>();
List<Integer> stack=new Stack<Integer>();
Run Code Online (Sandbox Code Playgroud)

2-使用Arrays.asList()

List<Integer> list=Arrays.asList(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

3- 使用 Collections 类方法

空列表

List<Integer> list = Collections.EMPTY_LIST;
Run Code Online (Sandbox Code Playgroud)

或者

List<Integer> list = Collections.emptyList();

Collections.addAll(list = new ArrayList<Integer>(), 1, 2, 3, 4);
Run Code Online (Sandbox Code Playgroud)

不可修改的列表

List<Integer> list = Collections
        .unmodifiableList(Arrays.asList(1, 2, 3));
Run Code Online (Sandbox Code Playgroud)

单例列表

List<Integer> list = Collections.singletonList(2);
Run Code Online (Sandbox Code Playgroud)

您可以从下面的参考链接中找到更多方法。

参考:

https://www.geeksforgeeks.org/initializing-a-list-in-java/


Pet*_*rey 5

有很多方法可以创建Set和List.HashSet和ArrayList只是两个例子.如今,将泛型与集合一起使用也是相当普遍的.我建议你看看它们是什么

这是java内置集合的一个很好的介绍.http://java.sun.com/javase/6/docs/technotes/guides/collections/overview.html


小智 5

List arrList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

它更好地使用泛型,如下所示:

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

arrList.add("one");
Run Code Online (Sandbox Code Playgroud)

如果你使用LinkedList.

List<String> lnkList = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)


why*_*yem 5

使用Java 8做同样事情的更多选项,不是更好,更糟糕,只是不同,如果你想对列表做一些额外的工作,Streams将为你提供更多选择(过滤,映射,减少等)

List<String> listA = Stream.of("a", "B", "C").collect(Collectors.toList());
List<Integer> listB = IntStream.range(10, 20).boxed().collect(Collectors.toList());
List<Double> listC = DoubleStream.generate(() -> { return new Random().nextDouble(); }).limit(10).boxed().collect(Collectors.toList());
LinkedList<Integer> listD = Stream.iterate(0, x -> x++).limit(10).collect(Collectors.toCollection(LinkedList::new));
Run Code Online (Sandbox Code Playgroud)


Job*_*eph 5

以下是您可以创建列表的一些方法。

  • 这将创建一个固定大小的列表,添加/删除元素是不可能的,java.lang.UnsupportedOperationException如果你尝试这样做,它会抛出一个。

    List<String> fixedSizeList = Arrays.asList(new String[] {"Male", "Female"});
    
    Run Code Online (Sandbox Code Playgroud)



  • 这就是LinkedList在java中创建一个的方法,如果你需要对列表中的元素进行频繁的插入/删除,你应该使用LinkedList而不是ArrayList

    List<String> linkedList = new LinkedList<>();
    
    Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 Arrays.asList("Male", "Female")`。 (2认同)