How to make a new List in Java
我们创建一个
我们如何在Java中创建EDCOX1 1?
或泛型(Java 7或更高版本)
1 | List<MyType> myList = new ArrayList<>(); |
或泛型(旧Java版本)
1 | List<MyType> myList = new ArrayList<MyType>(); |
此外,如果要创建包含内容的列表(尽管其大小是固定的),请执行以下操作:
1 |
让我总结并添加一些内容:
JDK
1 2 |
番石榴
1 2 |
不变列表
1 2 3 4 5 6 | 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 2 |
字符列表
1 2 | 1. Lists.charactersOf("String") // Guava 2. Lists.newArrayList(Splitter.fixedLength(1).split("String")) // Guava |
整数列表
1 | Ints.asList(1,2,3); // Guava |
在Java 8中
要创建固定大小的非空列表(不支持添加、删除等操作):
1 |
要创建非空可变列表:
1 |
在Java 9中
使用新的
1 2 3 |
在Java 10中
使用局部变量类型推断:
1 2 3 4 5 |
并遵循最佳实践…
不使用原始类型自从Java 5以来,泛型一直是语言的一部分——你应该使用它们:
1 2 3 |
程序到接口
例如,对
1 | List<Double> list = new ArrayList<>(); |
而不是:
1 | ArrayList<Double> list = new ArrayList<>(); // This is a bad idea! |
先读这个,然后读这个和这个。10次中有9次您将使用这两个实现中的一个。
实际上,只需阅读Sun的收集框架指南。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //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具有通用实例创建的类型推断,因此不需要在赋值的右侧复制通用参数:
1 | List<String> list = new ArrayList<>(); |
固定大小列表可以定义为:
1 |
对于不可变列表,可以使用guava库:
1 | List<String> list = ImmutableList.of("foo","bar"); |
列表只是一个与设置相同的接口。
与hashset是一个集合的实现类似,它在添加/查找/删除性能方面具有某些属性,arraylist是列表的裸实现。
如果您查看了各个接口的文档,您将发现"所有已知的实现类",您可以决定哪个类更适合您的需求。
很可能是最合理的。
我们可以创建如下列表:
1 2 | List<String> arrayList = new ArrayList<>(); List<String> linkedList = new LinkedList<>(); |
我们还可以创建一个固定大小的列表,如下所示:
1 |
我们几乎总是使用
上面由
根据Doc,方法
1 |
爪哇9
如果我们使用Java 9,那么:
1 |
爪哇10
如果我们在Java 10,那么方法EDCOX1 OR 11将返回Java 9中引入的真正不可修改列表的实例。在Java 10中检查EDCOX1与10的EDCOX1和11之间的差异的更多信息。
或者用仿制药
1 | List<String> list = new ArrayList<String>(); |
当然,也可以将字符串替换为任何类型的变量,例如整数。
有时(但很少),您可能需要一个新的LinkedList,而不是一个新的ArrayList。从arraylist开始,如果你有性能问题和证据表明列表是问题所在,那么大量的添加和删除到该列表中-然后-而不是之前-切换到LinkedList,看看情况是否有所改善。但总的来说,坚持数组列表,一切都会好起来的。
一个例子:
您可以查看JavaDoc列表,并找到包含在Java API中的所有EDCOX1 0接口的已知实现类。
使用Google集合,可以在Lists类中使用以下方法
1 2 3 4 5 6 7 | import com.google.common.collect.Lists; // ... List<String> strings = Lists.newArrayList(); List<Integer> integers = Lists.newLinkedList(); |
存在用于varargs初始化和从
这些方法的优点是,您不需要像使用构造函数那样显式地指定泛型参数-编译器将从变量的类型推断它。
1 | List<Object> nameOfList = new ArrayList<Object>(); |
您需要导入
使用Java 9,您可以执行以下操作来创建一个不可变的EDCOX1,0个:
1 2 3 | List<Integer> immutableList = List.of(1, 2, 3, 4, 5); List<Integer> mutableList = new ArrayList<>(immutableList); |
更多的选择用Java 8做同样的事情,不是更好,不是更坏,只是不同,如果你想做一些额外的工作与列表,流将提供更多的选择(过滤器,地图,减少等)。
1 2 3 4 | 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)); |
作为一个选项,您可以在此处使用双括号初始化:
1 2 3 4 5 6 | List<String> list = new ArrayList<String>(){ { add("a"); add("b"); } }; |
最好使用下面建议的仿制药:
1 2 3 | List<String> arrList = new ArrayList<String>(); arrList.add("one"); |
如果您使用LinkedList。
1 | List<String> lnkList = new LinkedList<String>(); |
创建集合和列表的方法有很多种。hashset和arraylist只是两个例子。如今,在集合中使用泛型也是相当常见的。我建议你看看它们是什么
这是Java的内置集合的一个很好的介绍。http://java.sun.com/javase/6/docs/technotes/guides/collections/overview.html
使用Eclipse集合,您可以创建如下列表:
1 2 | List<String> list1 = Lists.mutable.empty(); List<String> list2 = Lists.mutable.of("One","Two","Three"); |
如果需要不可变列表:
1 2 | ImmutableList<String> list3 = Lists.immutable.empty(); ImmutableList<String> list4 = Lists.immutable.of("One","Two","Three"); |
您可以使用原始列表来避免自动装箱。下面是创建int列表的方法:
1 2 3 4 5 | 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个原语都有变体。
1 2 3 4 5 6 7 | 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集合的提交者。
以下是创建列表的一些方法。
这将创建一个具有固定大小的列表,添加/删除元素是不可能的,如果您尝试这样做,它将抛出一个
java.lang.UnsupportedOperationException 。
< BR>
下面的版本是一个简单的列表,您可以在其中添加/删除任意数量的元素。
1List<String> list = new ArrayList<>();
< BR>
这是如何在Java中创建EDCOX1×3的方法,如果需要频繁地插入/删除列表中的元素,则应该使用EDCOX1×3×ED代替EDCOX1×2
1List<String> linkedList = new LinkedList<>();
如果需要具有单个实体的可序列化、不可变列表,可以使用:
1 |
试试这个:
1 |
或:
1 2 | List<String> list1 = Lists.mutable.empty(); // Empty List<String> list2 = Lists.mutable.of("One","Two","Three"); |