资讯专栏INFORMATION COLUMN

Java 中初始化 List 集合的 6 种方式!

Binguner / 1943人阅读

摘要:是开发中经常会使用的集合,你们知道有哪些方式可以初始化一个吗这其中不缺乏一些坑,今天栈长我给大家一一普及一下。好了,今天栈长就给大家介绍到这里了,这种,你知道几种另外,也有类似的初始化的方法,大家有兴趣的可以试一下。

List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。

1、常规方式
List languages = new ArrayList<>();
languages.add("Java");
languages.add("PHP");
languages.add("Python");
System.out.println(languages);

这种就是我们平常用的最多最平常的方式了,没什么好说的,后面缺失的泛型类型在 JDK 7 之后就可以不用写具体的类型了,改进后会自动推断类型。

2、Arrays 工具类
List jdks = asList("JDK6", "JDK8", "JDK10");
System.out.println(jdks);

注意,上面的 asList 是 Arrays 的静态方法,这里使用了静态导入。这种方式添加的是不可变的 List, 即不能添加、删除等操作,需要警惕。。

import static java.util.Arrays.asList;

如果要可变,那就使用 ArrayList 再包装一下,如下面所示。

List numbers = new ArrayList<>(Arrays.asList("1", "2", "3"));
numbers.add("4");
System.out.println(numbers);

包装一下,这就是可变的 ArrayList 了。

3、Collections 工具类
List apples = Collections.nCopies(3, "apple");
System.out.println(apples);

这种方式添加的是不可变的、复制某个元素N遍的工具类,以上程序输出:

[apple, apple, apple]

老规则,如果要可变,使用 ArrayList 包装一遍。

List dogs = new ArrayList<>(Collections.nCopies(3, "dog"));
dogs.add("dog");
System.out.println(dogs);

还有初始化单个对象的 List 工具类,这种方式也是不可变的,集合内只能有一个元素,这种也用得很少啊。

List cat = Collections.singletonList("cat");
System.out.println(cat);

还有一个创建空 List 的工具类,没有默认容量,节省空间,但不知道实际工作中有什么鸟用。

List cat = Collections.emptyList("cat");
4、匿名内部类
List names = new ArrayList<>() {{
    add("Tom");
    add("Sally");
    add("John");
}};
System.out.println(names);

这种使用了匿名内部类的方式,一气喝成,是不是很高大上?栈长我曾经也使用过这种方式,不过我觉得这种看似高级,实现也没什么卵用。

5、JDK8 Stream
List colors = Stream.of("blue", "red", "yellow").collect(toList());
System.out.println(colors);

Stream 是 JDK 8 推出来的新概念,比集合还要更强大,还可以和集合互相转换。

上面同样使用了静态导入:

import static java.util.stream.Collectors.toList;

关于 Stream 的一系列教程,可以在Java技术栈微信公众号后台回复关键字:新特性。

6、JDK 9 List.of
List cups = List.of("A", "B", "C");
System.out.println(cups);

这是 JDK 9 里面新增的 List 接口里面的静态方法,同样也是不可变的。

在接口中实现静态方法和默认方法是 JDK 8 中添加的新特性,具体看这篇文章《[JDK 8 新特性之接口默认方法与静态方法
](https://mp.weixin.qq.com/s/_V...》。更多 JDK 新特性,可以在Java技术栈微信公众号后台回复关键字:新特性。

好了,今天栈长就给大家介绍到这里了,这 6 种,你知道几种?另外,Map, Set 也有类似的初始化的方法,大家有兴趣的可以试一下。

你还知道哪些绝招呢?欢迎留言分享一下。。。

本文原创首发于微信公众号:Java技术栈(id:javastack),关注公众号在后台回复 "java" 可获取更多,转载请原样保留本信息。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72578.html

相关文章

  • Java编程基础34——JDBC&DBUtil

    摘要:不用自己来创建,而是通过池来获取对象使用完后,调用的方法也不会真的关闭,而是把归还给池连接池技术可以完成对象的再次利用接口为数据库连接池提供了公共的接口各个厂商需要让自己的连接池实现这个接口。 1.DButils工具类的介绍个三个核心类 A: 概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用。 DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少...

    svtter 评论0 收藏0
  • List&Map&Set操作和遍历

    摘要:的操作和遍历的三大集合即。的实现类原理比较简单,比较复杂,而其实是基于的一种实现。 List&Map&Set的操作和遍历 Java的三大集合即:Set、List、Map。 Set:代表无序、不可重复的集合,常用的有HashSet(哈希表实现)、TreeSet(红黑树实现); List:代表有序、可以重复的集合,比较常用的有ArrayList(数组实现)、LinkedList(链表实现...

    lavnFan 评论0 收藏0
  • Java 线程相关类

    摘要:提供了线程安全的共享对象,在编写多线程代码时,可把不安全的整个变量封装进,或者把该对象与线程相关的状态使用保存并不能替代同步机制,两者面向的问题领域不同。 ThreadLocal类 使用ThreadLocal类可以简化多线程编程时的并发访问,使用这个工具类可以很简捷地隔离多线程程序的竞争资源。Java5之后,为ThreadLocal类增加了泛型支持,即ThreadLocal Threa...

    Sanchi 评论0 收藏0
  • Java 8 Stream 来写代码,干净优雅!

    摘要:补充一点使用数值流可以避免计算过程中拆箱装箱,提高性能。其目的主要是打开流,做出某种程度的数据映射过滤,然后返回一个新的流,交给下一个操作使用。终端操作的执行,才会真正开始流的遍历。 Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简...

    wemall 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<