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

我们创build一个Set为:

 Set myset = new HashSet() 

我们如何在Java中创build一个List

 List myList = new ArrayList(); 

或与generics

 List<MyType> myList = new ArrayList<MyType>(); 

另外,如果你想创build一个包含东西的列表(虽然它将是固定的大小):

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

让我总结和添加一些东西:

JDK

 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 

首先阅读这个 ,然后阅读这个和这个 。 10次​​中有9次使用这两种实现中的一种。

实际上,只要阅读Sun的Collections指南即可 。

 //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 7开始, 对generics实例的创build有了types推断 ,所以不需要在赋值的右边重复generics参数:

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

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

 List<String> list = Arrays.asList("foo", "bar"); 

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

 List<String> list = ImmutableList.of("foo", "bar"); 

列表只是一个接口,就像Set 。

像HashSet是一个Set的实现,它具有关于添加/查找/删除性能的特定属性,ArrayList是List的裸机实现。

如果你看看各个接口的文档,你会发现“所有已知的实现类”,你可以决定哪一个更适合你的需求。

有可能是ArrayList 。

List是一个像Set这样的接口,并且具有ArrayListLinkedList作为通用实现 。

我们可以创build列表为:

  List<String> arrayList = new ArrayList<>(); List<String> linkedList = new LinkedList<>(); 

我们也可以创build一个固定大小的列表:

 List<String> list = Arrays.asList("A", "B", "C"); 

我们几乎总是使用与LinkedList实现相对的ArrayList

  1. LinkedList为对象使用了很多空间,并且当我们有很多元素的时候performance不好。
  2. LinkedList任何索引操作都需要O(n)时间,与ArrayList O(1)相比较。
  3. 查看这个链接了解更多信息。
 List list = new ArrayList(); 

或与generics

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

当然,也可以用任何types的variablesreplacestring,例如Integer。

有时 – 但只是很less – 而不是一个新的ArrayList,你可能需要一个新的LinkedList。 从ArrayList开始,如果你有性能问题和证据表明是列表是问题,并且大量的添加和删除到那个列表 – 然后 – 之前 – 切换到一个LinkedList,看看事情是否改善。 但在主要的,坚持ArrayList和一切都会好的。

一个例子:

 List somelist = new ArrayList(); 

您可以查看List的javadoc,并查找包含在java api中的List接口的所有已知实现类。

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

 import com.google.common.collect.Lists; // ... List<String> strings = Lists.newArrayList(); List<Integer> integers = Lists.newLinkedList(); 

有重载可变参数初始化和从Iterable<T>初始化。

这些方法的优点是不需要像构造函数那样显式地指定通用参数 – 编译器会根据variables的types来推断它。

 List<Object> nameOfList = new ArrayList<Object>(); 

你需要导入ListArrayList

 List arrList = new ArrayList(); 

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

 List<String> arrList = new ArrayList<String>(); arrList.add("one"); 

因为你使用LinkedList。

 List<String> lnkList = new LinkedList<String>(); 

有很多方法可以创build一个Set和一个List。 HashSet和ArrayList只是两个例子。 这些天使用generics也是相当普遍的。 我build议你看看他们是什么

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

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

 List<String> list = new ArrayList<String>(){{ add("a"); add("b"); }}; 

更多的选项可以用Java 8做同样的事情,不是更好,更糟糕,只是不同,如果你想对列表做一些额外的工作, Streams会为你提供更多的select(filter,映射,缩减等)

 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)); 

使用Eclipse集合,你可以像这样创build一个List:

 List<String> list1 = Lists.mutable.empty(); List<String> list2 = Lists.mutable.of("One", "Two", "Three"); 

如果你想要一个不变的列表:

 ImmutableList<String> list3 = Lists.immutable.empty(); ImmutableList<String> list4 = Lists.immutable.of("One", "Two", "Three"); 

您可以通过使用原始列表来避免自动装箱。 以下是你如何创buildint列表:

 MutableIntList list5 = IntLists.mutable.empty(); MutableIntList list6 = IntLists.mutable.of(1, 2, 3); ImmutableIntList list7 = IntLists.immutable.empty(); ImmutableIntList list8 = IntLists.immutable.of(1, 2, 3); 

所有8个基元都有变种。

 MutableLongList longList = LongLists.mutable.of(1L, 2L, 3L); MutableCharList charList = CharLists.mutable.of('a', 'b', 'c'); MutableShortList shortList = ShortLists.mutable.of((short) 1, (short) 2, (short) 3); MutableByteList byteList = ByteLists.mutable.of((byte) 1, (byte) 2, (byte) 3); MutableBooleanList booleanList = BooleanLists.mutable.of(true, false); MutableFloatList floatList = FloatLists.mutable.of(1.0f, 2.0f, 3.0f); MutableDoubleList doubleList = DoubleLists.mutable.of(1.0, 2.0, 3.0); 

注意:我是Eclipse集合的提交者。

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

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

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

  • 以下版本是一个简单的列表,您可以添加/删除任何数量的元素。

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

  • 这是如何在java中创build一个LinkedList ,如果你需要频繁插入/删除列表上的元素,你应该使用LinkedList而不是ArrayList

    List<String> linkedList = new LinkedList<>();

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

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

列表的一个实例可以通过以下任何一种方式创build

  List list1 = new ArrayList(); List list2 = new Stack(); List list3 = new LinkedList(); List list4 = new Vector();