数组转换为集合

采用java中集合自带的asList()方法就可以完成转换了

  1. String[] array = new String[] {"zhu", "wen", "tao"};
  2. // String数组转List集合
  3. List<String> mlist = Arrays.asList(array);
  4. // 输出List集合
  5. for (int i = 0; i < mlist.size(); i++) {
  6. System.out.println("mlist-->" + mlist.get(i));
  7. }

特别注意:

因为,Arrays.asList()方法转换成的List集合类是java.util.Arrays.ArrayList下面的,它是java.util.Arrays类中自己定义的一个内部类,没有实现具体的add()以及remove()方法,直接使用父类AbstractList的方法,但是父类中add()以及remove()方法是抛出UnsupportedOperationException()异常的。

所以如果单纯转换成List集合是为了遍历,则通过Arrays.asList()方法转换之后就可以了,但是如果需要对List集合进行增删改操作的,则需要自己重新新建一个List集合,把数据转到新的集合中,进行后续操作

解决方案:

1、运用ArrayList的构造方法是目前来说最完美的作法,代码简洁,效率高:

  List<String> list = new ArrayList<String>(Arrays.asList(array));

  1. List<String> list = new ArrayList<String>(Arrays.asList(array));
  2. //ArrayList构造方法源码
  3. public ArrayList(Collection<? extends E> c) {
  4. elementData = c.toArray();
  5. size = elementData.length;
  6. // c.toArray might (incorrectly) not return Object[] (see 6260652)
  7. if (elementData.getClass() != Object[].class)
  8. elementData = Arrays.copyOf(elementData, size, Object[].class);
  9. }

2、运用Collections的addAll方法也也是不错的解决办法

  1. List<String> list = new ArrayList<String>(array.length);
  2. Collections.addAll(list, array);

List集合转换成数组

  1. 采用集合的toArray()方法直接把List集合转换成数组,这里需要注意,不能这样写:
  2. String[] array = (String[]) mlist.toArray();
  3. 这样写的话,编译运行时会报类型无法转换java.lang.ClassCastException的错误,这是为何呢,这样写看起来没有问题啊
  4. 因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,所以将整个List强制转换是不行的
  5. 正确的写法应该是这样的
  6. String[] array = mlist.toArray(new String[0]);
  1. List<String> mlist = new ArrayList<>();
  2. mlist.add("zhu");
  3. mlist.add("wen");
  4. mlist.add("tao");
  5. // List转成数组
  6. String[] array = mlist.toArray(new String[0]);
  7. // 输出数组
  8. for (int i = 0; i < array.length; i++) {
  9. System.out.println("array--> " + array[i]);
  10. }

参考

原文:https://blog.csdn.net/zhenwei1994/article/details/78783209

java集合与数组之间转换的更多相关文章

  1. Java 集合 集合与数组之间的转换

    Java 集合 集合与数组之间的转换 @author ixenos 数组转集合 Arrays.asList(T... a) 先给结论:用 Arrays.asList(T... a) 将数组转换成集合 ...

  2. java中 列表,集合,数组之间的转换

    java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 java中 列表,集合,数组之间的转换 List和Set都是接口,它们继承Collection(集合),集合里面任何数据 ...

  3. Java集合和数组的区别

    参考:Java集合和数组的区别 集合和容器都是Java中的容器. 区别 数组特点:大小固定,只能存储相同数据类型的数据 集合特点:大小可动态扩展,可以存储各种类型的数据   转换 数组转换为集合: A ...

  4. JAXB实现java对象与xml之间转换

    JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...

  5. java 中集合和数组互相转换

    package test; import java.util.Arrays;import java.util.List; /** * Created by Administrator on 2016/ ...

  6. JAVA 集合List,数组,Set,Map,直接的相互转换

    Java集合转换[List<-->数组.List<-->Set.数组<-->Set.Map-->Set.Map-->List] //List--> ...

  7. java 集合与数组的互转方法,与源码分析

    前言 java数组与集合需要互相转换的场景非常多,但是运用不好还是容易抛出UnSupportedOperationException.下面讲解一下互转的方法,以及结合源码分异常产生的原因 集合转数组 ...

  8. Java List与数组之间的转换

    http://blog.csdn.net/kingzone_2008/article/details/8444678

  9. Java字符串到数组的转换--最后放大招

    本文是关于如何在Java中以不同方式将String转换为String Array的几种方法,按照惯例,文末会分享Groovy语言中的实现. split()方法 字符串api是通过split()方法添加 ...

随机推荐

  1. CF809D Hitchhiking in the Baltic States

    CF809D Hitchhiking in the Baltic States CF809D 长度为n的序列{xi},n<=3e5,范围在(li,ri)之间,求LIS最长是多长g(i,l)表示前 ...

  2. onload事件属性,JQ中的load,ready方法

    onload事件属性,JQ中的load,ready方法 前言 页面中的很多操作,需要我们在所需资源下载完成后,才可以进行操作,而资源没有及时下载,我们进行操作的话,是会报错.因此我们需要熟练掌握哪些事 ...

  3. 011.MFC_Slider

    滑块CSliderCtrl 常用函数SetLineSize() GetLineSize() SetPageSize() GetPageSize()SetRangeMax() GetRangeMax() ...

  4. ARM裸机开发之交叉工具链和MakeFile工程管理

    一.交叉工具链 嵌入式Linux开发采用交叉开发,简单来说就是在宿主机(PC机)上面编译出能够在其他硬件平台上面运行的程序.在这个过程中,需要用到许多的交叉工具,这些交叉工具的集合就叫做交叉工具链.下 ...

  5. git之github解决冲突

    1.先创建一个txt文件,并进行编辑 2.然后推送到github,过程看之前的教程. 3.在另一个文件夹拉取(用小乌龟拉取),分别在克隆文件夹和原本文件夹操作test.txt. 4.把本体推送给服务器 ...

  6. 15.python变量,递归

    原文:https://www.cnblogs.com/linhaifeng/articles/6113086.html#_label6 # 如果函数的内容有global关键字 # - 有声明局部变量 ...

  7. Django学习小记1-安装配置

    Django是一个开放源代码的Web应用框架,由Python写成. python 中的web框架有许多例如:Django.Tornado.Flask..而Django相较与其他WEB框架其优势为:大而 ...

  8. 【题解】GREWords(AC自动机)

    [题解]GREWords(AC自动机) SP9941 GRE - GRE Words 题目大意: 给定一个由字符串构成的序列,不同位置的字符串有自己权值.现在让你选出一个子序列,使得在这个子序列中,前 ...

  9. Python基础复习函数篇

    目录 1.猴子补丁2. global和nonlocal关键字3.迭代器和生成器4.递归函数5.高阶函数和lamdba函数6.闭包7.装饰器 1.   猴子补丁 猴子补丁主要用于在不修改已有代码情况下修 ...

  10. 《算法笔记》之基础C/C++入门

    开始进行算法笔记的学习,在此纪录下来,同时作为自己日后复习资料. 1.基本语法 #include <iostream> using namespace std; int main(){ c ...