java 集合转化数组_java集合与数组之间转换

数组转换为集合

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

String[] array = new String[] {"zhu", "wen", "tao"};

// String数组转List集合

List mlist = Arrays.asList(array);

// 输出List集合

for (int i = 0; i < mlist.size(); i++) {

System.out.println("mlist-->" + mlist.get(i));

}

特别注意:

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

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

解决方案:

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

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

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

//ArrayList构造方法源码

public ArrayList(Collection extends E> c) {

elementData = c.toArray();

size = elementData.length;

// c.toArray might (incorrectly) not return Object[] (see 6260652)

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

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

}

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

List list = new ArrayList(array.length);

Collections.addAll(list, array);

List集合转换成数组

采用集合的toArray()方法直接把List集合转换成数组,这里需要注意,不能这样写:

String[] array = (String[]) mlist.toArray();

这样写的话,编译运行时会报类型无法转换java.lang.ClassCastException的错误,这是为何呢,这样写看起来没有问题啊

因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,所以将整个List强制转换是不行的

正确的写法应该是这样的

String[] array = mlist.toArray(new String[0]);

List mlist = new ArrayList<>();

mlist.add("zhu");

mlist.add("wen");

mlist.add("tao");

// List转成数组

String[] array = mlist.toArray(new String[0]);

// 输出数组

for (int i = 0; i < array.length; i++) {

System.out.println("array--> " + array[i]);

}

参考

你可能感兴趣的:(java,集合转化数组)