java asarray_Java数组转集合之Arrays.asList()用法

Arrays.asList()用法

使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合。

而一开始asList的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用asList(),而asList()恰巧可用于将数组转为集合。

public class App {

public static void main(String[] args) {

List stringA = Arrays.asList("A");

String[] stringArray = {"B"};

List stringB = Arrays.asList(stringArray);

System.out.println(stringA);

System.out.println(stringB);

}

}

运行结果

[A]

[B]

public class App {

public static void main(String[] args) {

int[] intarray = {1, 2, 3, 4, 5};

//List list = Arrays.asList(intarray); 编译通不过

List list = Arrays.asList(intarray);

System.out.println(list);

}

}

output:

[[I@66d3c617]

你是不是以为上面 👆那个 list 是 java.util.ArrayList ?

实际上返回的是:java.util.Arrays.ArrayList

源码:

a5f9a54ae25f712bc718cca59968a56f.png

但它和ArrayList貌似很像唉!有什么不同吗?

不同之处:

Arrays.ArrayList 是工具类 Arrays 的一个内部静态类,它没有完全实现List的方法,而 ArrayList直接实现了List 接口,实现了List所有方法。

1aaba39af7ec3fd1bce2854902f7effd.png

长度不同 和 实现的方法不同

Arrays.ArrayList是一个定长集合,因为它没有重写add,remove方法,所以一旦初始化元素后,集合的size就是不可变的。

参数赋值方式不同

Arrays.ArrayList将外部数组的引用直接通过“=”赋予内部的泛型数组,所以本质指向同一个数组。

bfc9ba8822501b82028389be3a8c01f3.png

ArrayList是将其他集合转为数组后copy到自己内部的数组的。

31e60c15043f6d4fa6521220dbbb0429.png

所以使用Arrays.asList()需要注意以下两点。

一、不能把基本数据类型转化为列表

仔细观察可以发现asList接受的参数是一个泛型的变长参数,而基本数据类型是无法泛型化的,如下所示:

public

class

App {

这是因为把int类型的数组当参数了,所以转换后的列表就只包含一个int[]元素。

要想把基本数据类型的数组转化为其包装类型的list,可以使用guava类库的工具方法,示例如下:

int[] intArray = {1, 2, 3, 4};

List list = Ints.asList(intArray);

支持基础类型的方式

1、如果使用Spring

e7f3fc13827795529d9e91e60812b956.png

2、如果使用Java 8

20262846ae0c942568fe2a5121e5020d.png

数组转ArrayList

1、遍历转换

a6f5f68895bbfd5795a392c7b5636efa.png

2、使用工具类

4559ca48978a61eb498ad308aa3fcf1a.png

3、如果使用Java 8

既可以用于基本类型也可以返回想要的集合。

自己比较常用

int a [] ={1,2,3};

List ilist = Arrays.stream(a).boxed()

.collect(Collectors.toList());

System.out.println(ilist);

4、两个集合类结合

a3fc4ffc1913481f727c8822209c1ecf.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值