【Java】记录Arrays.asList()的易混淆点

今天学习和练习Arrays.asList(),这其间发现有些老师并没有讲得很透,网上也没找到相关讲解(或是不全)的易混淆点。在阅读了多篇文章和手动实践后整理出以下知识点。故此记录下来,方便自己复习,也给同样的新人朋友们一些参考。

前注:本人是初学者,如有错误还请多多指教。

  • Arrays.asList()属于工具类Arrays的类方法,使用前需要导包

    import java.util.ArrayList;

  • 引入参数可以是基本数据类型的数组,但是只能以数组形式存入集合,没有意义(不建议使用)

	int[] i={12,56,48};
	List<int[]> li=Arrays.asList(i);
	//或者
	List<int[]> al=new ArrayList<>(Arrays.asList(i));
	System.out.println(li);  //[[I@1b3ebeb]
	System.out.println(li.size());  //1

如果真的想要把基本数据类型数组中的数据存入集合,那就只能先转化为对应的包装类数组再存入集合,方法不少,但最简单的是使用第三方的ArrayUtils工具类中的toObject()

import org.apache.commons.lang3.ArrayUtils;

	int[] a={1,2,3};
	List<Integer> a1=Arrays.asList(ArrayUtils.toObject(a));

新人朋友要注意这个是第三方开发的工具类(包),需要先去官网下载"Binaries"下的"commons-lang3-(版本号)-bin"的压缩文件,把里边的"commons-lang3-(版本号).jar"解压到你的 jdk>jre>lib>ext 文件夹中。

  • 对于List,Arrays.asList()有两种赋值方式
 	String[] s={"a","b","c"};
	List<String> li=Arrays.asList(s);
	ArrayList<String> al=new ArrayList<>(Arrays.asList(s));
  1. 需要注意的是这样的不行的,编译会报错
ArrayList<String> li=Arrays.asList(s);

错误: 不兼容的类型: 不存在类型变量T的实例, 以使List与ArrayList一致
ArrayList li=Arrays.asList(s);
其中, T是类型变量:
T扩展已在方法 asList(T…)中声明的Object

  1. List li=Arrays.asList(s); 这种不可以使用add()或是remove(),可以理解为就是一个数组。别的文章说原理是底层其实是一个Array类的自定义内部类,其没有定义add()和remove()

  2. ArrayList al=new ArrayList<>(Arrays.asList(s)); 这个可以正常增删的原理是它其实调用的是它的有参构造器,参数为其它集合,所以是一个正常集合。

  • 顺便提一下这个 ,其实都是上边讲过的,但是见过有这样的考题,所以特意拿出来再说一次。
Integer[] in={1,2,3};
int[] i={1,2,3};
System.out.println("Integer[] in="+Arrays.asList(in));  //Integer[] in=[1, 2, 3]
System.out.println("int[] i="+Arrays.asList(i));  //int[] i=[[I@139a55]

- 关于Set类型,这样是不可以的

	String[] s={"a","b","c"};
	Set<String> set=Arrays.asList(s);

记住它返回的是Array类的自定义内部类实例化的对象,所以无法用Set类型做接收。
但是一下两种是可以的:

	Set<String> set=new HashSet<>(Arrays.asList(s));
	HashSet<String>hs=new HashSet<>(Arrays.asList(s));

其原理也是调用有参构造器
然后就是别忘了Set各个实现类的特性,它们会对这个数组有一定的影响。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值