数组和List集合中常用的存储数据的两种数据结构。二者在使用的过程中,可能会进行相互转化使用,那么在使用的过程中,有些注意事项,一不注意的话就很容易采坑。
1 数组转集合
String strArray [] = new String[3];
strArray[0] = "wer";
strArray[1] = "23";
strArray[2] = "543";
List<String> list = Arrays.asList(strArray);
如果接下来使用List集合中的方法对其修改的话,那么就会出现 java.lang.UnsupportedOperationException。
list.add(“afsdf”);
list.remove(“23”);
原因在于asList()方法中返回的对象是一个Arrays中的内部类,只是提供了个别方法的实现。源码如下所示:
而如果想要修改原有数组中的数据,可以通过list集合提供的set(int index ,E element)方法来使用。
list.set(0,"hello");
如果说想要用Arrays.as()方法,又想使用动态的改变集合元素的数量,可以使用如下的方法。
List<String> strList = new java.util.ArrayList<String>(Arrays.asList(strArray));
这样就可以大胆的使用add(),remove方法了。
2 集合转数组
List list = new ArrayList<>();
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Object[] objects = list.toArray();
String[] str1 = new String[2];
list.toArray(str1);
String[] str2 = new String[3];
list.toArray(str2);
System.out.println(Arrays.asList(objects));
System.out.println(Arrays.asList(str1));
System.out.println(Arrays.asList(str2));
执行结果如下所示:
objects结果[a, b, c]
str1结果[null, null]
str2结果[a, b, c]
list.toArray()这种方法不推荐使用,因为造成泛型丢失,
如果想要通过list.toArray(T[] a)的方式进行,那么分两种情况,如果构建的数组大小小于集合的长度,那么就会出现str1的结果,如果构建数组的大小大于等于集合的长度,结果就非常的好。如同str2.