本文分析了Stack Overflow上最热门的的一个问题的答案,提问者获得了很多声望点,使得他得到了在Stack Overflow上做很多事情的权限。这跟我没什么关系,我们还是先看看这个问题吧。

这个问题是”在Java中怎样把数组转换为ArrayList?”

Element[] array = {new Element(1),new Element(2),new Element(3)};

1.最流行也是被最多人接受的答案

最普遍也是被最多人接受的答案如下:

ArrayList arrayList = new ArrayList(Arrays.asList(array));

首先,我们来看下ArrayList的构造方法的文档。

ArrayList(Collection < ? extends E > c) : 构造一个包含特定容器的元素的列表,并且根据容器迭代器的顺序返回。

所以构造方法所做的事情如下:

1.将容器c转换为一个数组

2.将数组拷贝到ArrayList中称为”elementData”的数组中

ArrayList的构造方法的源码如下:

public ArrayList(Collection extends E> c) {

elementData = c.toArray();

size = elementData.length;

if (elementData.getClass() != Object[].class)

elementData = Arrays.copyOf(elementData, size, Object[].class);

}

2.另外一个流行的答案

另外一个流行的答案是:

List list = Arrays.asList(array);

这不是最好的,因为asList()返回的列表的大小是固定的。事实上,返回的列表不是java.util.ArrayList,而是定义在java.util.Arrays中一个私有静态类。我们知道ArrayList的实现本质上是一个数组,而asList()返回的列表是由原始数组支持的固定大小的列表。这种情况下,如果添加或删除列表中的元素,程序会抛出异常UnsupportedOperationException。

list.add(new Element(4));

Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

at collection.ConvertArray.main(ConvertArray.java:22)

3.又一个解决方案

这个解决方案由Otto提供

Element[] array = {new Element(1), new Element(2)};

List list = new ArrayList(array.length);

Collections.addAll(list, array);

4.该问题的表明的东西

这个问题不难,但却很有趣。每个Java程序员都知道ArrayList,但却很容易犯下这样的错误。我想这就是这个问题很火的原因吧。如果是一个特定领域的Java库的相似的问题,就远不会这样火热了。

这个问题有好多答案提供了相同的解决方案,对于StackOverflow的其他问题也是这样。我猜想当人们想要回答一个问题时,是不会管别人说了什么的。

java 数组转化为arraylist_在Java中怎样把数组转换为ArrayList?相关推荐

  1. java数组和链表的区别_java中链表和数组的区别?

    综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...

  2. java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  3. sql server 数组_如何在SQL Server中实现类似数组的功能

    sql server 数组 介绍 (Introduction) I was training some Oracle DBAs in T-SQL and they asked me how to cr ...

  4. python数组相减_对Python 中矩阵或者数组相减的法则详解

    对Python 中矩阵或者数组相减的法则详解 最近在做编程练习,发现有些结果的值与答案相差较大,通过分析比较得出结论,大概过程如下: 定义了一个计算损失的函数: def error(yhat,labe ...

  5. mysql 关联数组_在PHP / MySQL查询中创建关联数组

    我的profileTable中有一个名为"Associations"的列-我正在尝试查询与关联相关的配置文件. $sql = mysqli_query($con,"SEL ...

  6. python中多维数组的计算_计算python中多维数组中数组的出现次数

    可以将这些行转换为1D数组,使用元素作为二维索引,并使用^{}.然后,使用^{}给我们每个唯一行的开始位置,并且还有一个可选参数return_counts来给我们计数.因此,实现将如下所示-def u ...

  7. python数组对应元素相乘_python – 将一个数组的每一行与numpy中另一个数组的每个元素相乘...

    使用 broadcasting – A[:,None,:]*B[:,:,None] 由于np.einsum也支持广播,你也可以使用它(感谢@ajcr建议这个简洁的版本) – np.einsum('ij ...

  8. java数组初始化为 1_Java Class 1.1数组初始化

    1.1.1Java数组是静态的 Java语言是静态语言,所以Java数组是静态的,当数组完成初始化后该数组的长度是不可变的.(初始化就是为数组元素分配存储空间并制定每个元素的初始值) 数组初始化有两种 ...

  9. java 在一个类中去调用另一个类中的对象数组

    比如说,我在A类中创建了一个对象数组.想在B类中去使用这个A类中的数组.那么有两种方式 以下创建的数组都是类类型的数组 我觉得类类型数组的好处可以给数组中的每一个元素创建多个标签.并且可以对多个标签进 ...

最新文章

  1. 【笔记】分离字符串中的数字、字母和汉字
  2. Android学习笔记——Menu(二)
  3. Harbor升级和数据库迁移手册
  4. ThinkPHP的增、删、改、查
  5. linux,shell中if else if的写法,if elif
  6. xhtml与html的区别开头,XHTML与HTML的差别
  7. oracle、sqlserver创建表、删除表、创建索引的sql
  8. oracle,sqlserver,mysql区别
  9. php mysql追踪器_zf框架的数据库追踪器使用示例
  10. Nacos概述,下载与安装,初始化配置,服务注册应用,RestTemplate,Feign
  11. 基于SSM的景区旅游管理系统
  12. pdf如何转换成word文档格式
  13. 类EMD的“信号分解方法”及MATLAB实现(第一篇)——EEMD
  14. 程序猿的自救 从零备考NSCA/CSCS 3 运动与训练的能量学
  15. html导出excel表头多了一行空行,excel中有时候表格下面有很多空行,下拉条滚动一点就过了很多行,怎么取消掉多余的行啊?(excel表头每页都显示)...
  16. 02.微软官方启动U盘装机教程
  17. 下列关于java集合说法错误的是_下列说法错误的是A.集合类都位于java.util包下
  18. Hdoj 3486 Interviewer(二分加RMQ)
  19. Android Studio键盘快捷键
  20. Remind myself

热门文章

  1. [转载]JAVA操作符
  2. SQL NOTE--VIEW
  3. HTTP头域列表与解释 之 request篇
  4. UVA 10803 - Thunder Mountain
  5. 成功解决 AttributeError: module ‘neat’ has no attribute ‘Config’解决方式
  6. Android-JNI开发系列《五》局部引用全局引用全局弱引用缓存策略
  7. Ubuntu18.04更换清华源
  8. 高通driver模块编译方法
  9. android7.0 Jack编译器报错解决
  10. android MemeoryFile和Parcel操作文件描述符fd