一、简介

今天,我们讲讲开发中常见的错误之一 - 数组转ArrayList的正确方式。

二、数组转ArrayList

项目中难免会有数组对象转换为List对象的需求,很多小伙伴们可能会这样写:

String[] array = new String[]{"a", "b", "c"};
//数组转List
List<String> list = Arrays.asList(array);
list.add("d");
System.out.println(list);

很不幸的是,上面的代码运行的话会直接报错:

原因解析,我们看一下Arrays.asList(array);方法的源码,发现返回值为ArrayList,但是这个ArrayList不是java.util.ArrayList,而是Arrays内部的一个私有静态内部类,查看size()可知道它的长度是固定的,不存在所谓的add()添加元素等方法。

public static <T> List<T> asList(T... a) {return new ArrayList<>(a);
}

ArrayList的构造方法可以接受一个Collection类型的对象,而我们的 java.util.Arrays.ArrayList正好也是它的一个子类,所以将上面的代码优化为:

List<String> list = new ArrayList<>(Arrays.asList(array));
list.add("d");
//[a, b, c, d]
System.out.println(list);

上面的代码可以成功实现将数组对象转换为集合List对象,并且具有add()、delete()元素的方法。

其实还有一种更加高效的写法,推荐使用Collections集合操作工具类:

List<String> list = new ArrayList<>();
Collections.addAll(list, array);
list.add("d");
//[a, b, c, d]
System.out.println(list);

推荐使用最后一种方式实现。

数组转ArrayList的正确方式相关推荐

  1. arraylist 初始化_第一章 C#数据结构--数组和ArrayList

    数组是最通用的数据结构,它出现在几乎所有的编程语言里.在 C#语言中使用数组包括创建 System.Array 类型的数组对象,以及创建针对所有数组的抽象的基类型.Array 类提供了一套方法,这些方 ...

  2. JS数组遍历的几种方式

    JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代 ...

  3. 【实战篇】| 小鹿教你用动态规划撩妹的正确方式

    作者 |  小鹿 来源 |  一个不甘平凡的码农 都说程序员是直男,聊天聊不过三句,看下边这位朋友求助小鹿,抱怨说,学习数据结构那么难,除了优化程序算法,其他的啥都不能干,学它干啥,哎,撩个妹子都撩不 ...

  4. 数组转化为集合的方式asList()

    asList()的使用 String[] arr = {"abc","ccc","ddd"};/*把数组变成list集合的好处?* 可以使用 ...

  5. C#方法,可空类型,数组,集合,ArrayList排序,List,Hashtable和Dictionary

    C#方法 方法的定义: public void/int Compare(int a,int b){ } Program program = new Program(); Console.WriteLi ...

  6. js中数组的几种循环方式

    js中数组的几种循环方式 for循环最基本的循环方式,不多说.这种最基本的循环才是速度最快的,效率最高的. for(var i = 0;i<5;i++){console.log(i) } for ...

  7. C/C++ | C语言字符数组初始化,有些赋值方式千万注意

    一.字符数组的定义和初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. charstr[10]={'I','','a','m','','h','a','p','p','y'}; ...

  8. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&quo ...

  9. 用动态规划撩妹的正确方式

    Linux编程 点击右侧关注,免费入门到精通! 作者 |  小鹿 来源 |  一个不甘平凡的码农 都说程序员是直男,聊天聊不过三句,看下边这位朋友求助小鹿,抱怨说,学习数据结构那么难,除了优化程序算法 ...

  10. (C++)字符数组的四种输入输出方式

    scanf/printf+%s getchar()/putchar() 前者不带参数后者带 gets()/puts() 二者都带参数,为一维字符数组或二维字符数组的一维 运用指针+scanf/prin ...

最新文章

  1. 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质!
  2. 用AI,认识西门子的另一面
  3. SAMBA配置文件所用到的参数
  4. java基础学习整理(一)
  5. BlinkOn9 - Viz Update
  6. 三个杯子的倒水问题(BFS)
  7. 热电偶测温方案 AD7124+Pt100冷端补偿
  8. 地理信息系统GIS在城市生活垃圾管理中的应用时间
  9. 电脑PHP动画制作画板,Canvas在线画图—简单制作一个画板
  10. python正则表达式快速入门_Python 正则表达式入门
  11. 微软bing每日壁纸API接口
  12. idea中的一些有趣的插件
  13. 为什么热咖啡保温几小时后的变化比冰咖啡大?
  14. 07年12月30日------温哥华国际机场
  15. BackTrack5(BT5)硬盘安装
  16. 世纪互联数据中心有限公司
  17. 博途PLC 中位值滤波算法(FC功能块)
  18. 表情包可视化编辑、生成配置信息数据工具
  19. amd显卡Linux闪屏,Mac 被曝运行 Win10 闪屏 苹果:可更新AMD显卡驱动、调整分辨率...
  20. [个人思考] 所思所想

热门文章

  1. python %号_python基础集结号
  2. 多项式拟合,模型的复杂度以及权重的变化
  3. [codeup 2143] 迷瘴
  4. Pandas:时间序列数据基本操作和分组
  5. AWS SageMaker 基于 XGBoost 的用户流失预测
  6. 算法:翻转链表 Reverse Linked List 三种方法实现,迭代解决人类思维,递归解决机器思维 reverse node
  7. ROC曲线及AUC值
  8. SSD,单次多框检测器Single Shot Multibox Detector,超越YOLO和Fast-RCNN
  9. FrameLayout AbsoluteLayout GridLayout用法及实例
  10. 浅谈算法和数据结构: 九 平衡查找树之红黑树