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

1、常规方式

List<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("PHP");
languages.add("Python");
System.out.println(languages);

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

2、Arrays 工具类

List<String> jdks = asList("JDK6", "JDK8", "JDK10");
System.out.println(jdks);

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

import static java.util.Arrays.asList;

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

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

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

3、Collections 工具类

List<String> apples = Collections.nCopies(3, "apple");
System.out.println(apples);

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

[apple, apple, apple]

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

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

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

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

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

List<String> cat = Collections.emptyList("cat");

4、匿名内部类

List<String> names = new ArrayList<>() {{add("Tom");add("Sally");add("John");
}};
System.out.println(names);

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

5、JDK8 Stream

List<String> 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<String> cups = List.of("A", "B", "C");
System.out.println(cups);

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

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

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

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

来源:https://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&mid=2247487850&idx=2&sn=036ce8c9fdf76bb9885318c991fe27c2&chksm=eb53945cdc241d4aa51f68c4199613fa98de5616e0cad1a281903758888734f2a09ae175186a&mpshare=1&scene=23&srcid=120797bZEiBuTC4QxKnwUsj0#rd

Java 中初始化 List 集合的 6 种方式!相关推荐

  1. Java 中初始化 List 集合的 7 种方式

    1.常规方式 List<String> languages = new ArrayList<>(); languages.add("Java"); lang ...

  2. Java中遍历Map集合的5种方式总结

    这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...

  3. java初始化集合_Java 中初始化 List 集合的 6 种方式!

    List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 如果想学习Java工程化.高性能及分布式.深入浅出. ...

  4. java arraylist静态初始化_Java 中初始化 List 集合的 6 种方式!

    1.常规方式 List languages = new ArrayList<>(); languages.add("Java"); languages.add(&quo ...

  5. Java创建初始化List集合的几种方式

    1.常规操作 List<Double> list=new ArrayList<>();list.add(32.5);list.add(78.3);list.add(45.6); ...

  6. Java中遍历Set集合的三种方法

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  7. Java中遍历Set集合的三种方法(实例代码)

    哈喽,欢迎来到小朱课堂,下面开始你的学习吧! Java中遍历Set集合的三种方法 废话不多说,直接上代码 1.迭代遍历: Set set = new HashSet(); Iterator it = ...

  8. Java中线程的创建有两种方式

    Java中继承thread类与实现Runnable接口的区别 Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过 ...

  9. java 判断数组已经存满_详解Java中数组判断元素存在几种方式比较

    1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String contai ...

最新文章

  1. go1.8之安装配置
  2. 收官礼 |《神策 2018 数据驱动大会回顾专刊》发布,你要的干货,已打包!
  3. 计算机对口升学可以报考的学校,对口升学可以报考的学校都在这里,赶快来收藏吧...
  4. c++ string 删除字符_字符串操作的全面总结
  5. 连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装
  6. 网络编程之Tcp,udp
  7. 微软开源计算机视觉专题库,含分类、检测、分割、关键点、跟踪、动作识别等主流方向...
  8. ubuntu中bash,sh,./,bash区别
  9. MySQL的replace方法
  10. EF 数据库连接约定(Connection String Conventions in Code First)
  11. 【python初学者日记】读入正整数n,判断它是质数还是合数,显示所有的因数(包括1和它自身)
  12. 智能计算机与应用是核心期刊吗,人工智能的核心期刊都有哪些
  13. lisp块改色_关于CAD制图的技巧:篇九,快速修改颜色。
  14. word 文档密码 html,Word文档密码解决打开方法
  15. 16个最佳PSD文件下载网站
  16. 复正弦信号、实数信号的DFT
  17. 七大数字经济重点产业!
  18. Vscode好用的快捷键:批量文字修改快捷键选中相同内容快捷键
  19. 论文投稿必看,审稿人意见互相矛盾,作者该怎么办?
  20. 话机按键音效——DTMF生成

热门文章

  1. 向git库提交代码出现”There are no staged files怎么办?
  2. (J2EE学习笔记)解决Hibernate删除异常:deleted object would be re-saved by cascade
  3. 数据库索引的作用和长处缺点
  4. 如何利用远程桌面连接CentOS的Desktop版本
  5. 【TensorFlow】TFRecord数据集的制作:读取、显示及代码详解
  6. ACE框架解读 - 源码篇
  7. Boost.Asio入门
  8. boost之对象池使用实例
  9. Android NDK开发——人脸检测与静默活体检测
  10. 图像处理——基于OpenCV的canny边缘检测