Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方式。

1.构造 List 后使用 List.add 初始化

这是最常规的做法,用起来不太方便。

2.使用 {{}} 双括号语法

这种方式相对方便了一些。

外层的{}定义了一个 LinkedList 的匿名内部类。内层的{}的定义了一个实例初始化代码块。 这个代码块在初始化内部类时执行。所以这里相当于定义了一个匿名内部类,并使用add添加元素来初始化。

这种方式有几个缺点:

使用匿名内部类,会有效率上的损失。当然在大多数情况下,这点效率都是可接受的。

静态内部类持有所在外部类的引用。如果需要将 List 返回给到其他地方使用,可能造成内存泄漏。

3.使用 Arrays.asList

这种方式使用了 java.util.Arrays 的静态方法。写法上比之前的两种都更简洁,也没有构造匿名内部类的效率问题。

但也有几点需要注意:

Arrays.asList 返回的是 Arrays 的静态内部类(静态内部类不持有所在外部类的引用)。

这个内部类继承自 AbstractList,实现了 RandomAccess,内部使用了一个数组来存储元素。但是不支持增删元素。这点需要注意。如果只是使用 Arrays.asList 来初始化常量,那么这点就不算什么问题了。

Arrays.asList 的参数如果是基本类型的数组时,需要留意返回值可能和你预期的不同。

这里Arrays.asList(intArray)的返回值是List而不是List。这一点也算不上问题,只是使用时需要留意。如果能在 Java 中做到尽量使用 List 和 Integer,尽量避免使用 int 等基本类型和[]这种较为底层的数据结构即可避免。

虽然本文是在讲初始化List,但这里的{{}}双括号语法同样可用于初始化Map等其他众多类型。相对而言,Arrays.asList就只能用于初始化List类型了。

4. 使用 Stream (JDK8)

使用了 JDK8 的 Stream 来初始化。 单纯初始化 List,使用 Stream 有点大材小用了。

5. 使用 Lists (JDK9)

作者:Java填坑之路

链接:https://www.jianshu.com/p/1841ebea43dc

java list定义和初始化_在 Java 中初始化 List 的五种方法相关推荐

  1. wireshark提取流量包中的文件_返璞归真——流量中提取文件的五种方法

    0×00  简介 本期主要会教大家如何从流量中还原出来文件.下面我将会用5种办法来讲解. 0×01  网络流量提取文件(方法1) 1.  安装依赖 Default yum install -y lib ...

  2. excel添加列下拉框票价_在Excel中制作下拉列表的三种方法

    下拉列表在Excel中的用途十分广泛.在Excel中制作下拉列表可以通过数据有效性.使用窗体控件和VBA控件工具箱中的组合框来制作.下面用一个具体的例子来进行说明(在文章结尾处可下载xls格式的示例文 ...

  3. element 手机适配_解决手机移动端适配的五种方法

    移动端适配的五种方法 所谓移动端适配,就是WebApp在不同尺寸的屏幕上等比显示 第一种方法:viewport适配 原理:通过设置 initial-scale , 将所有设备布局视口的宽度调整为设计图 ...

  4. java不定义数组长度_在JAVA中定义数组时,可不可以一开始不设定数组的长度?...

    MYYA 定义时当然可以:例如 int[] a;但是要把它初始化成为一个真正意义上的数组就必须设定长度: int [] a = new int[10]; 这时就只能改变数组里的数值而不能改变它的长度了 ...

  5. java密度图怎么画_画直方图和函数密度曲线的几种方法

    方法一:R语言 w + 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0) hist(w, freq = FALSE) lines(density(w), col = ...

  6. java系统慢怎么优化_解决vmware虚拟机速度慢的3种方法

    解决vmware虚拟机速度慢的3种方法 使用vmware虚拟操作系统的好处不用多说,但如果虚拟机运行速度十分缓慢,正常使用很卡的话是很痛苦的.本文介绍了3种提高虚拟机运行速度的方法,都是古意人实际操作 ...

  7. 用户体验改善案例_优化用户体验案例研究的五种方法

    用户体验改善案例 重点 (Top highlight) I've had the opportunity to give several portfolio reviews, and I want t ...

  8. jsp工程防止外部注入_防止 jsp被sql注入的五种方法

    一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...

  9. indexof方法_[ 翻译 ] ES6中数组去重的三种方法

    原文:How to Remove Array Duplicates in ES6 翻译:Hytonight云息 有三种方法可以过滤掉一个数组的重复元素并且返回去重后的新数组.我最喜欢使用Set,因为它 ...

  10. azure云数据库_在Azure SQL数据库中保护数据的五种方法

    azure云数据库 When storing data in the cloud the main concern companies generally have is whether or not ...

最新文章

  1. [转] 大连理工大学部分有效FTP列表1.0
  2. 30 个 Pandas技巧,加速你的数据分析处理速度!
  3. sign check fail: check Sign and Data Fail!-错误处理
  4. 5月17日 AJAX 之 XML
  5. linux基础之软件包管理
  6. grads插值_GrADS中填色标尺cbarn用法
  7. [渝粤教育] 西南科技大学 英语(B)1 在线考试复习资料
  8. 零基础带你玩转微信小程序--小程序的基础和安装
  9. (六)Graphics基本应用
  10. 如何通过linux的终端命令远程登陆windows主机
  11. 刚刚,蚂蚁区块链喜提“世界互联网领先科技成果”大奖!
  12. office2013来了
  13. 关于鸿蒙系统 JS UI 框架源码的分析
  14. 华为十年(转贴)原华为牛人写的
  15. vue项目创建之后 ESLint导致第一行毛毛虫
  16. 仅3w报价B站up主竟带来1200w播放!品牌高性价比B站投放标杆!
  17. 中国余热发电市场运作动态与十四五可行性研究报告2021年版
  18. 备份工具mysqldump介绍
  19. 【80后回忆】经典电视剧集
  20. #! 脚本解释器(如何不加node 直接执行js文件)

热门文章

  1. win7下CSP修改方法
  2. 关注世界语(Esperanto)
  3. ElasticJob源码分析--定时任务执行JobScheduler类分析
  4. python日志分析
  5. Android平台实现系统内录(捕获播放的音频)并推送RTMP服务技术方案探究
  6. 语音中prior posterior likelihood的理解
  7. lgg7深度详细参数_探讨CAPP与PDM的深度集成
  8. html5 video 播放按钮缩小,【Web前端问题】video在手机端封面有一个很大的播放按钮怎么去掉...
  9. SAP MRP公式与计算
  10. 8.3.2018 1 Quick and dirty 快而脏的快餐