我们知道集合的功能相比较数组是比较更加强大的,有时候我们需要将数组转换为集合,来使用集合中已有的方法来进行操作,那么我们就需要将数组转换为集合
数组转集合方法大全以及注意事项!
前提:
我们可以使用Arrays工具类来进行转换:它有这么一个静态方法:
//它的参数是一个可变参数,你既可以传递一个数组的引用,也可以传递可变的字符序列
List<T> Arrays.asList(T...a); 返回一个List<T>集合
方法1:
认真看,对你有帮助的
将Arrays.asList(arr)返回的对象直接赋值给一个List对象
//这里省去导包,等其他次要代码
String[] arr = {"张三","李四","王五","马六"};
List<String> list1 = Arrays.asList(arr);
注意、注意、千万要注意!
我们在代码中可以看出,我们的List集合并没有实例化它的子类,所以此时的list1这个引用只是指向了数组开辟的那段地址空间,因此它依旧是一个不可变的数组。对它修改后其实修改了数组开辟空间中的那些数据,简而言之,通过这种方法操作的依旧是原数组
代码证明
String[] arr= {"张三","李四","王五","马六"};
List<String> list1 = Arrays.asList(arr);
//翻转数组中的元素
Collections.reverse(list1);
//此时的list1集合为[马六,王五,李四,张三]
//对原数组进行遍历
for(String s : arr){
System.out.println(s);
}
//打印结果:
马六
王五
李四
张三
//对集合中的元素进行修改
list1.set(2,"哈哈"); //将李四变为哈哈
//遍历
for(String s : arr){
System.out.println(s);
}
//输出结果
马六
王五
哈哈
张三
--------------------------------------------
list.add("报错"); //不能添加元素的,否则报错
java.lang.UnsupportedOperationException
此时的集合操作的是数组,数组不可变容器
方法2:
我们知道第一个方法有很大的局限性,那么我们就看一下第三种方法
前提:
了解List集合的实现类的构造方法
//很简单就是创建对象的时候时候可以进行传参数,进行转换
ArrayList(Collection<? extends E> c)
代码演示
String[] arr = {"张三","李四","王五","马六"};
//因为参数是一个集合对象,所以借助我们上边的方法
List<String> list2 = new ArrayList<>(Arrays.asList(arr));
System.out.println(list2);
//打印结果: [张三,李四,王五,马六]
这种方法其实就是将一个数组的内容传给了一个集合,该集合操作的就是自己这个对象。因此在以后的操作种不会对原数组进行改变。
方法3:
创建集合的时候使用默认的空参构造。然后采用添加的方法
String[] arr = {"张三","李四","王五","马六"};
List<String> list3 = new ArrayList<>();
list3.addAll(Arrays.asList(arr));
System.out.println(list3);
//打印结果: [张三,李四,王五,马六]
方法4:
创建集合的时候使用默认的空参构造。然后采用集合的工具类中添加的方法Collections.addAll(List list,T…t)
String[] arr = {"张三","李四","王五","马六"};
List<String> list4 = new ArrayList<>();
Collections.addAll(list4,arr);
System.out.println(list4);
//可以接受可变参数列表
Collections.addAll(list4,{"田七","豆豆"});
//打印结果: [张三,李四,王五,马六]
那么我们的2,3,4方法有什么异同?
肯定有的:
Collection的构造器可以接受另一个Collection,Collection.addAll()方法只能接受一个Collection对象,而Collections.addAll()不仅可以接受一个数组,还可以接受一个可变参数列表
方法5:
对数组进行遍历,一次添加到集合中,太太太麻烦咯!!!
省略代码…………
打工人,去实战吧……
顺便写一下集合转数组吧~~~~~~~~~~~
集合转数组:
集合转数组的方法也很多,介绍最常见的两种吧:
方法1:
//不需要指定数据类型,Collection集合共有的方法toArray()方法
List<String> list = new ArrayList<>();
list.add("你好");
list.add("Java");
//集合转数组toArray();
Object[] arr = list.toArray();
//转换的数组是Object类型的
方法2:
//可以指定数据类型,前提你的集合存储的就是这种数据类型
//Collection共有的方法toArray(T[] t);
List<String> list = new ArrayList<>();
list.add("你好");
list.add("Java");
String[] arr = list.toArray(new String[list.size()]);
//设置数组的长度为集合的大小,可以小,但是不能没有,此时底层会自动帮你扩容。如果大的话就使用null进行填充
其实方法2也是可以转换为方法1的,因此我认为方法2比较实用,减少了我们后期的转型工作。
Object[] object = list.toArray(new Object[list.size()]);
今天又是周末,加鸡腿~~