如何在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
这样的接口,并且具有ArrayList
和LinkedList
作为通用实现 。
我们可以创build列表为:
List<String> arrayList = new ArrayList<>(); List<String> linkedList = new LinkedList<>();
我们也可以创build一个固定大小的列表:
List<String> list = Arrays.asList("A", "B", "C");
我们几乎总是使用与LinkedList
实现相对的ArrayList
:
-
LinkedList
为对象使用了很多空间,并且当我们有很多元素的时候performance不好。 -
LinkedList
任何索引操作都需要O(n)时间,与ArrayList
O(1)相比较。 - 查看这个链接了解更多信息。
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>();
你需要导入List
和ArrayList
。
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();