数组转List集合的Java详解

我们知道集合的功能相比较数组是比较更加强大的,有时候我们需要将数组转换为集合,来使用集合中已有的方法来进行操作,那么我们就需要将数组转换为集合

数组转集合方法大全以及注意事项!

前提:

我们可以使用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()]);

今天又是周末,加鸡腿~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值