在学习数组的时候,我们介绍了一个Arrays工具类,当时没有学习集合的知识,现在来介绍这个工具类的一个把数组转换成集合的方法asList()。
1.字符串数组转化成集合
package arrays;
import java.util.Arrays;
import java.util.List;
public class Demo1_ToList {
public static void main(String[] args) {
String[] arr = {"a","b","c","d"};
//Arrays.toList()方法,直接把数组转成集合,返回一个集合对象
List<String> list = Arrays.asList(arr); //数组转成集合对象
System.out.println(list);
}
}
运行输出:[a, b, c, d]
2.基本数据类型数组转换成集合
package arrays;
import java.util.Arrays;
import java.util.List;
public class Demo1_ToList {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
//Arrays.toList()方法,直接把数组转成集合,返回一个集合对象
List list = Arrays.asList(arr); //数组转成集合对象
System.out.println(list);
}
}
运行一下:[[I@15db9742]看到运行结果,是不是很奇怪,为什么不是输出[11,22,33,44,55].原因就是在转换之后,把[11,22,33,44,55]当做成一个对象给存储集合中,因为集合中只能存储引用数据类型,不能存储基本数据类型。那么如果要实现打印基本数据类型的效果呢,这个时候我们就需要使用基本数据类型的包装类,这样就变成一个引用数据类型,可以存储到集合中。
package arrays;
import java.util.Arrays;
import java.util.List;
public class Demo1_ToList {
public static void main(String[] args) {
Integer[] arr = {11,22,33,44,55};
//Arrays.toList()方法,直接把数组转成集合,返回一个集合对象
List<Integer> list = Arrays.asList(arr); //数组转成集合对象
System.out.println(list);
}
}
运行输出:[11, 22, 33, 44, 55]
3.数组转集合之后注意点
数组是不可以改变的,集合是可以对元素进行添加和操作。那么为什么还需要把数组转换成集合呢?数组转集合是为了借助集合的思想,来操作元素,但是不能进行添加和删除元素操作,其他集合的方法,数组转成集合是能用的,否则会报不支持操作的异常。
package arrays;
import java.util.Arrays;
import java.util.List;
public class Demo1_ToList {
public static void main(String[] args) {
String[] arr = {"a","b","c"};
//Arrays.toList()方法,直接把数组转成集合,返回一个集合对象
List<String> list = Arrays.asList(arr); //数组转成集合对象
System.out.println(list);
list.add("f");
}
}
上面的list.add("f")代码在编译没有报错,运行就报UnsupportedOperationException异常。
4.集合转数组toArray(T[] a)方法
我们再来学习下集合转数组方法的第二个方法toArray(T[] A),t[]其实就是制定的泛型。
package arrays;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Demo1_ToList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//集合转数组
String[] arr = list.toArray(new String[0]);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
运行输出:a b c d
上面需要提一下下面这行代码的0的作用
String[] arr = list.toArray(new String[0]);
如果不是0,改成10会打印什么结果?
a b c d null null null null null null
通过这个可以看出这个0或者10表示转换后数组的长度。有这样一个规律:当集合转换数组时,如果数组长度小于等于集合的size时候,转换后的数组长度等于集合的size。如果指定转换后长度大于集合的size,分配的数组长度就和指定的长度一样。例如上面指定长度是10,大于原集合size(4),所以转换后数组长度是10,后面6个元素为null。