数组转List-典型代码缺陷分析(三)

以上为开发过程中,部分程序猿数组转list的“笨”方法,为什么说笨呢,因为这样做代码很繁琐不简练容易出错可读性叫差,而且还比较耗时,因为我要一个一个遍历数组,然后把这个元素添加到list中(不过以上代码还有几点,最好给ArrayList<String>指定一个初始容量,注意和LinkedList的区别,以及split方法使用的效率和可能内存泄漏问题,此文不再详述,此处重点解读数组转list)。

其实JDK特意为这种情况准备了一个方法,那就是java.util包中的Arrays.asList方法,如下:

一行代码即可解决数组转list的问题,可读性高而且不易出错,而且asList方法底层是将数组的引种直接付给的一个私有内部类Arrays.ArrayList的里的数组了,效率相对一个一个对应的添加引用变量更高一些。

不过asList得的list的大小固定,可以说是“参数数组的视图”,其实返回的ArrayList类型为Arrays的私有内部类,它并没有对应的add或者remove方法,所以不能进行元素的增加或者删除否则会报异常,一般这种list用于Dao层方法的传参,如果想得到一个可以增加或者删除的list,可以new ArrayList(Arrays.asList(数组))即可,其详细使用及注意事项请参考我的博文:Array.asList:数组转list时你一定要知道的“陷阱”!

补充:

如果是如Arrays.asList(ids.split(","))将一个字符串以指定的分隔符(或者分割字符串或者正则表达式或者其他)拆分数组再转List的话,还有一个也比较直接简便的方法,就是利用google的工具类库Guava里的splitter.on(",").splitToList(字符串)来实现,不过这个方法得到的也是大小不可变的list。

循环体中用“+”拼接字符串-代码典型缺陷分析(二)

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/44499263

欢迎关注我的博客,敬请关注代码典型缺陷分析系列下一篇!

如果过程中有讲解的不合理或者不对或者你有更好的想法,还望大牛们留下你们的宝贵文字,以便你、我、大家更好的学习与进步!

时间: 2024-08-21 21:58:11

数组转List-典型代码缺陷分析(三)的相关文章

nova boot代码流程分析(三):nova与neutron的交互(2)

继续<nova boot代码流程分析(三):nova与neutron的交互(1)>的分析. #/nova/virt/libvirt/driver.py:LibvirtDriver # NOTE(ilyaalekseyev): Implementation like in multinics # for xenapi(tr3buchet) def spawn(self, context, instance, image_meta, injected_files, admin_password,

nova boot代码流程分析(五):VM启动从neutron-dhcp-agent获取IP与MAC

1.   network和subnet创建代码流程 [[email protected] ~(keystone_user1)]# neutron net-create demo-net [[email protected] ~(keystone_user1)]# neutron subnet-create  demo-net 1.1.1.0/24 --name demo-subnet --gateway 1.1.1.1 --enable_dhcp true 这里,我们主要分析上面两个命令的代码流

【转】Scrapy研究探索(三)——Scrapy核心架构与代码运行分析

转自 http://blog.csdn.net/u012150179/article/details/34441655 学习曲线总是这样,简单例子“浅尝”,在从理论+实践慢慢攻破.理论永远是基础,切记“勿在浮沙筑高台”. 一. 核心架构 关于核心架构,在官方文档中阐述的非常清晰,地址:http://doc.scrapy.org/en/latest/topics/architecture.html. 英文有障碍可查看中文翻译文档,笔者也参与了Scraoy部分文档的翻译,我的翻译GitHub地址:h

Scrapy研究探索(三)——Scrapy核心架构与代码执行分析

学习曲线总是这样,简单样例"浅尝".在从理论+实践慢慢攻破.理论永远是基础,切记"勿在浮沙筑高台". 一. 核心架构 关于核心架构.在官方文档中阐述的非常清晰,地址:http://doc.scrapy.org/en/latest/topics/architecture.html. 英文有障碍可查看中文翻译文档.笔者也參与了Scraoy部分文档的翻译.我的翻译GitHub地址:https://github.com/younghz/scrapy_doc_chs.源rep

测试缺陷分析务实篇

测试缺陷分析务实篇 作者:罗耀秋 来源:网络 摘要: 测试活动作为IT项目和产品开发一个重要的环节,通过发现产品或组件的缺陷,并反馈给开发组修复验证这些缺陷,从而在一定程度上保证了外发产品的质量.对这些测试活动发现的缺陷进行深入的分析,可以有助于我们进行质量预测.进行过程改进.量化的衡量产品质量. 关键词: 测试分析.过程改进.质量预测.过程能力.缺陷 正文: 项目研发过程中,我们通过单元测试.集成测试.系统测试发现了大量的缺陷.我们把这些Bug输入到Excel或者其他测试管理系统中,跟踪其解决

HDFS源码分析(三)-----数据块关系基本结构

前言 正如我在前面的文章中曾经写过,在HDFS中存在着两大关系模块,一个是文件与block数据块的关系,简称为第一关系,但是相比于第一个关系清晰的结构关系,HDFS的第二关系就没有这么简单了,第二关系自然是与数据节点相关,就是数据块与数据节点的映射关系,里面的有些过程的确是错综复杂的,这个也很好理解嘛,本身block块就很多,而且还有副本设置,然后一旦集群规模扩大,数据节点的数量也将会变大,如何处理此时的数据块与对应数据节点的映射就必然不是简单的事情了,所以这里有一点是比较特别的,随着系统的运行

源代码缺陷分析工具 Coverity Static Analysis

能够发现的C/C++缺陷(部分) C/C++安全性问题(部分) 并发 死锁 错误使用的阻塞调用 性能下降 内存泄漏 文件句柄泄漏 定制的内存和网络资源泄漏 数据库连接泄漏 导致崩溃的缺陷 空指针引用 释放后引用 多次释放 不正确的内存分配 不匹配的数组新建/删除 不正确的程序行为 逻辑错误导致的死代码 未初始化变量 负数的无效引用 不正确的APIs使用 STL使用错误 API错误处理 安全编码缺陷 缓冲区溢出 整形溢出 缺失的/不充分的恶意数据和字符串输入的验证 格式化字符串的不安全 SQL注入

一些有用的javascript实例分析(三)

原文:一些有用的javascript实例分析(三) 1 10 输入两个数字,比较大小 2 window.onload = function () 3 { 4 var aInput = document.getElementsByTagName("input"); 5 var aSpan = document.getElementsByTagName("span")[0]; 6 for(var i=0;i<aInput.length-1;i++){ 7 aInp

Nouveau源码分析(三):NVIDIA设备初始化之nouveau_drm_probe

Nouveau源码分析(三) 向DRM注册了Nouveau驱动之后,内核中的PCI模块就会扫描所有没有对应驱动的设备,然后和nouveau_drm_pci_table对照. 对于匹配的设备,PCI模块就调用对应的probe函数,也就是nouveau_drm_probe. // /drivers/gpu/drm/nouveau/nouveau_drm.c 281 static int nouveau_drm_probe(struct pci_dev *pdev, 282 const struct