1.数组转集合
java提供了一个方法:Arrays.asList(T... a)的方法。
测试:
String[] arr = { "Lida","huanda","zhangda"}; //数组转集合list System.out.println(Arrays.asList(arr)); 输出结果: [Lida, huanda, zhangda] 这里需要注意的一点是,转出来的集合不能执行新增,删除等操作,如果执行list.add("xxx");会报错 java.lang.UnsupportedOperationException ,通过查看源码,Arrays.asList()返回new ArrayList<>(a),但这个和ArrayList有一些区别,这里返回的是java.util.Arrays$ArrayList,Arrays的内部类 部分源码:
/** * @serial include */ private static class ArrayListextends AbstractList implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { a = Objects.requireNonNull(array); }
该类继承了AbstractList,AbstractList继承了AbstractCollection,AbstractCollection里有add()和remove()方法,但都是抛出一个异常,并没有处理,继承的这些类都没有对这些方法进行重写,所以会报错。 部分源码:
public void add(int index, E element) { throw new UnsupportedOperationException(); } /** * { @inheritDoc} * *This implementation always throws an * { @code UnsupportedOperationException}. * * @throws UnsupportedOperationException { @inheritDoc} * @throws IndexOutOfBoundsException { @inheritDoc} */ public E remove(int index) { throw new UnsupportedOperationException(); } 2.集合转数组 例如:list转数组,java提供了两种方法:1.list.toArray();2.list.toArray(T[] a); 测试:
//第一种方式 Listlist = new ArrayList(); list.add("lisi"); list.add("wangwu"); list.add("zhangsan"); *String[] str =(String[]) list.toArray(); //list.toArray()返回的是Object[]类型,这里直接整体强转会报错 //ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;不能整体进行强转,还是需要单转 //第二种方式 List list = new ArrayList(); list.add("lisi"); list.add("wangwu"); list.add("zhangsan"); String[] arr = new String[list.size()]; String[] str = list.toArray(arr);
所以第二种使用时会更加方便。 补充1:在java8里面有一个String.join()的方法,这个方法在工作中还是蛮实用的,这里可以将集合,数组,或一些元素,以某种间隔符隔开,例如:
String str2 = String.join(",",list);//将list集合转为字符串,并且以,隔开,输出结果:lisi,wangwu,zhangsan
String str2 = String.join(",",arr); //可以是数组,输出结果:lisi,wangwu,zhangsan
String str2 = String.join(",","lsii","wangwu","zhansan");//还可以直接写字符串,输出结果:lisi,wangwu,zhangsan
待更。。。。。。