在 Java 中初始化 List 的五种方法

Java编程技巧-定义集合常量、定义数组常量的最佳方式 一般定义数组常量,会像下面代码一样,定义一个公有数组常量但是,可以通过下标修改数组值,导致数组常量的值可变。所以,这种方法定义的数组常量,并不是一个真正意义上的数组常量。最佳法“私有数组常量+公有克隆方法”的解决方案。如下代码所示:先定义一个私有数组常量,保证不会被外部类使用;在定义一个获取数组常量方法,并返回一个数组常量的克隆值。由于每次返回的是一个克隆数组,即便修改了克隆数组的常量值,也不会导致原始数组常量值的修改。 阅读详情

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

 

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

List<String> stringList = new LinkedList<>();
stringList.add("a");
stringList.add("b");
stringList.add("c");

 

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

 

 

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

 

List<String> stringList = new LinkedList<String>(){{
   add("a");
   add("b");
   add("c");
}};

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

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

这种方式有几个缺点:

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

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

 

3.使用 Arrays.asList

List<String> stringList = Arrays.asList("a", "b", "c");

 

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

但也有几点需要注意:

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

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

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

     

int[] intArray = new int[]{1, 2, 3};
Integer[] integerArray = new Integer[]{1, 2, 3};

List<int[] > intArrayList = Arrays.asList(intArray);
List<Integer> integerList = Arrays.asList(integerArray);
List<Integer> integerList2 = Arrays.asList(1, 2, 3);

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

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

 

4. 使用 Stream (JDK8)

List<String> list = Stream.of("a", "b", "c").collect(Collectors.toList());

 

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

 

5. 使用 Lists (JDK9)

List<String> list = Lists.newArrayList("a", "b", "c");复制代码

 

这个和 Arrays.asList 一样简洁清晰。


gsplat在windows本地部署 3DGS的cuda提效和优化内存的版本gsplat,使得在有一定GPU计算能力的电脑上也能够尝尝3DGS的效果。我在2025年的开年之初尝试配置过gsplat,由于过程中遇到很多问题,最终还是有一些windows上字符编码的问题,没有跑通,最近看gsplat的github更新了3DGUT,优化了反射和二次折射,以及适用于非线性相机模型,如鱼眼相机等。在data目录下下载好了360_v2的数据,进入之后images文件夹是原始分辨率的图像,images_2是下采样系数为2的数据,以此类推。 阅读详情

相关推荐

薛定谔虚拟筛选实战:如何用PDB文件快速构建受体格点(避坑指南)

本文提供了薛定谔虚拟筛选实战指南,聚焦于如何从PDB文件快速、精准地构建受体格点。文章详细解析了可变残基的理性处理策略、基于配体尺寸的盒子量化设置方法,并分享了高级约束与排除体积的实战技巧,旨在帮助用户避开常见陷阱,提升虚拟筛选的成功率与效率。

weixin_28419039的博客 254

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

1.常规操作 List<Integer> list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); 2.Arrays工具类(不可变) List<Integer> list1= Arrays.asList(1,2,3); asList是Arrays的静态方法。这种方式构造的List是固定长度的,如果调用add方法增加新的元素,会报异常java.lang.UnsupportedOperationEx

weixin_47951400的博客 8847

ZEMAX学习第7天-手机镜头光学系统设计全过程案例

接下来对系统微调,依次缩小CRA和畸变,首先对CRA进行依次递减(39°、38°、37°、36°、35°),目前CRA角度40度,每次下降一度进行优化,利用MAXX加OPLT一起控制,控制小于35°。可以看出在标注的三个地方镜头曲率变化,导致PY=1的光线走向奇特,因此需要对矢高进行调整,按照标注的地方依次调整(从右到左)至传函变好,越靠近右边对其余视场影响越小。3.圆锥系数值较大,透镜形状怪异;一、第1,3镜子偏厚,第4镜子偏薄,45镜子间隔边缘偏小,第5片镜子中心厚度与边缘厚度相差较大,需要控制;

liningliwei的博客 1085

【Java】 List<List<Integer>>初始化方法

今天在写力扣的时候遇到了List<List>初始化的问题 有两种方法 List<List> list = new ArrayList<List>(); List<List> list = new ArrayList<>(); //注意没有Integer list是接口,ArrayList实现了这个接口,所以不能直接new List<List>() ...

qq_45792472的博客 3806

VS2015编译配置GDAL(图文并茂、超详细!!!)

文章目录一、GDAL介绍二、下载GDAL三、修改源代码四、工具命令提示符操作五、编译GDAL六、安装GDAL七、在VS2015的项目中配置GDAL八、添加环境变量九、测试是否配置成功 一、GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在XMIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。因此

weixin_46196863的博客 3757

国产麒麟系统下用Rider开发C#桌面应用:从环境配置到Avalonia UI实战

本文详细介绍了在国产麒麟系统上使用JetBrains Rider开发C#桌面应用的完整流程,重点讲解了Avalonia UI框架的实战应用。从环境配置、Rider安装到Avalonia项目创建和UI开发技巧,全面覆盖了在非Windows环境下进行C#开发的关键步骤和优化建议,助力开发者高效构建跨平台桌面应用。

weixin_27791839的博客 387

Java 常量类声明list

Java常量类声明list 在Java编程中,常量类是指一个类中包含一组常量的类,这些常量通常用static和final修饰符修饰,不会改变其值。在实际开发中,我们通常会将一些固定不变的数值、字符串或者枚举值定义为常量,以便于在程序中引用和使用。 常量类声明 在Java中,常量类通常采用“常量大写”的命名规范,例如: 登录...

weixin_32626635的博客 387

自动驾驶仿真:python和carsim联合仿真案例

carsim内部有许多相关联合仿真的demo,simulink、labview等等都有涉及,这里简单介绍下python和carsim联合仿真的方法,虽然carsim官方有个Steer_Control.py相关的案例,但是感觉比较冗余,这里抽出重点部分和大家交流探讨下。提示:以下是本篇文章正文内容,下面案例可供参考1、这里关于solvers的细节其实都没说,因为里面确实也没什么内容好讲的,本质就是调用carsim.dll,如果你需要更多的函数解析其实可以看vs_api.h,路径在,具体内容如下图所示。

zataji的博客 9063

JAVA集合之List源码阅读

文章目录1. ArrayList1.1 初始化 1. ArrayList 1.1 初始化 初始化有三种方式,不传值、传int、传Collection List<Integer> list = new ArrayList<Integer>(); /** * 使用默认的数组,数组大小为10,capacity容量也为10 */ public ArrayList() { this.elementData = DEFAULTCAPACITY

qq_38345430的博客 450

Access查询中的Dlookup函数的妙用

在Microsoft Access中,处理和分析数据的过程中,常常会遇到需要根据条件从其他记录中提取特定数据的情况。这时候,Dlookup函数就成了开发者和数据分析师的得力助手。今天我们将通过一个具体的实例,详细探讨如何利用Dlookup函数来解决复杂的查询问题。

m0_62153576的博客 296

DXF转G代码是圆弧的方向如何确定?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1189

java 初始化 List 的五种方法

转自: 在 Java 中初始化 List 的五种方法 1.构造 List 后使用 List.add 初始化 List<String> stringList = new LinkedList<>(); stringList.add("a"); stringList.add("b"); stringList.add("c"); 这是最常规的做法,用起来不太方便。 2.使用 {{}} 双括号语法 List<String> stringList = new LinkedList

知北行的博客 1万+

ESP32-C3模组上实现蓝牙BLE配网功能(1)

ESP32-C3模组上实现蓝牙BLE配网功能(1)

phmatthaus的专栏 2280

初始化一个列表java,Java 中初始化 List 的五种方法

在 Java 中初始化 List 的五种方法Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方式。1.构造 List 后使用 List.add 初始化List stringList = new LinkedList<>();stringList.add("a");stringList.add("b");stringList.add("c");这是最常规的做法,用起来不...

weixin_30995363的博客 1848

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java 中初始化 List 的五种方法

在 Java 中初始化 List 的五种方法 1.构造 List 后使用 List.add 初始化 2.使用 {{}} 双括号语法 3.使用 Arrays.asList 4.使用 Stream (JDK8) 5.使用 Lists (JDK9) 1.构造 List 后使用 List.add 初始化 List<String> stringList = new LinkedList&lt...

weixin_42590334的博客 639

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java list定义int_在 Java 中初始化 List 的五种方法

1.构造List后使用List.add初始化这是最常规的做法,用起来不太方便。2.使用{{}}双括号语法这种方式相对方便了一些。外层的{}定义了一个 LinkedList 的匿名内部类。内层的{}的定义了一个实例初始化代码块。 这个代码块在初始化内部类时执行。所以这里相当于定义了一个匿名内部类,并使用add添加元素来初始化。这种方式有几个缺点:使用匿名内部类,会有效率上的损失。当然在大...

weixin_39537977的博客 1984

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java中初始化List的五种方法

1.构造List后使用List.add初始化 List&amp;lt;String&amp;gt; stringList = new LinkedList&amp;lt;String&amp;gt;(); stringList.add(&quot;a&quot;); stringList.add(&quot;b&quot;); stringList.add(&quot;c&quot;); 2.使用{{}} Lis

weixin_42983044的博客 1297

java中list怎么初始化一次,在 Java 中初始化 List 的五种方法

在 Java 中初始化 List 的五种方法Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方式。1.构造 List 后使用 List.add 初始化List stringList = new LinkedList<>();stringList.add("a");stringList.add("b");stringList.add("c");复制代码这是最常规的做法,...

weixin_35888209的博客 438
上一篇: 16个经典面试问题回答思路
下一篇: Eclipse的Debug介绍与技巧
java架构那些事
博客等级 码龄6年 6粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值