Java 中初始化 List 集合的 6 种方式!「建议收藏」

Java 中初始化 List 集合的 6 种方式!「建议收藏」Java 中初始化 List 集合的 6 种方式!

大家好,又见面了,我是你们的朋友全栈君。

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 新特性之接口默认方法与静态方法
](https://mp.weixin.qq.com/s/_V…》。更多 JDK 新特性,可以在Java技术栈微信公众号后台回复关键字:新特性。

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

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

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

Java 中初始化 List 集合的 6 种方式!「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107154.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • postman使用教程1

    postman使用教程1  在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件-RESTClient,Chrome浏览器插件-Postman等等。这里主要介绍一下Postman。 一、Postman说明  Postman是一种网页调试与发送网页http请求的chrome插件…

    2022年5月6日
    52
  • Python3取余不等于0(巨坑)[通俗易懂]

    Python3取余不等于0(巨坑)[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年4月25日
    89
  • Shell脚本备忘录

    Shell脚本备忘录目录1.jq1.1安装1.2几个常用例子1.2.1取出数组index=0的内容1.2.2取出数组index=0的name的内容1.2.3以key-value的格式取出数组index=0的name和city1.2.4以key-value的格式取出所有数组的name和city1.2.5以key-value的格式取出数组index=0的name和arrayBrowser的index=1的url1.2.6以key-value的格式取出所有数组的name和city并放在一个数组里(前后加上[])1.

    2022年6月25日
    26
  • CSS属性小结之–半透明处理

    CSS属性小结之–半透明处理项目中经常有遇到需求半透明的情况,如图片、文字、容器、背景等等,每次都要去翻以前的项目,不甚其烦。现在一次性做个小结,方便自己查阅,也同时分享给大家:一、元素容器透明说明:1.opacity

    2022年7月4日
    23
  • c++ 二维vector_vector如何重置

    c++ 二维vector_vector如何重置初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到)vector>newOne(r,vector(c,0));2.用resize()来控制大小vector>res;res.resize(r);//r行for(intk=0;k

    2022年9月18日
    0
  • Python3 实例–Python 计算圆的面积

    Python3 实例–Python 计算圆的面积#代码如下:#Python3实例–Python计算圆的面积print(“Python3实例–Python计算圆的面积”)#公式中r为圆的半径。r=float(input())PI=3.14s=PI*(r**2)print(“圆的面积为:{}”.format(s))#运行结果如下:Python3实例–Python计算圆的面积3圆的面积为:…

    2025年6月5日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号