java中Arrays类的学习

起因

项目中,遇到如下问题:
data为MiniOrderModel实体类,

List  <MiniOrderModel> orderModelList = pager.getData();
orderModelList.add(data);

执行报错:java.lang.unsupportedOperationException at java.util.AbstractList.add

Arrays.asList()

Arrays官网

public static <T> List<T> asList(T... a){
    return  new ArrayList<>(a);
}

输入参数:泛型的变长参数。注:基本类型不能泛型化。
输出参数:固定长度的列表。
官方例子:此方法还提供了一种方便的方法来创建一个固定大小的列表,该列表已初始化为包含多个元素:

  List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

设计初衷是为了生成长度不可变的list,保证数据的安全性。
ArrayList 继承AbstractList。
AbstractList的add方法如下:

public void add(int index,
                E element){
                throw new unsupportedOperationException();
                }

其remove方法如下:

public E remove(int index){
   throw new unsupportedOperationException();
}

Arrays内部的ArrayList 继承AbstractList,没有重写add和remove方法,所以会抛出异常。(第一处

java.util.ArrayList

java.util.ArrayList 继承AbstractList,但重写了add和remove方法。
因此,文章一开始的添加操作应该修改为:

List<MiniOrderModel> orderModelListOri = pager.getData();
List<MiniOrderModel> orderModelList = new ArrayList(orderModelListOri);
orderModelList.add(data);

Arrays.asList()用途

Arrays.asList()常用作循环遍历(第二处),如下:

//Integer
Integer[] array={1,2,4};
List<Integer> list = Arrays.asList(array);
for(Integer l :list){
	System.out.println(l);
}
list.set(0,88);
System.out.println(list.get(0));
System.out.println(array[0]);

array[1] = 66;
System.out.println(list.get(1));
System.out.println(array[1]);

//基本类型 int
int[] array1={1,2,4};
List list1 = Arrays.asList(array1);
for(Integer l :list1){
	System.out.println(l);
}
list1.set(0,88);
System.out.println(list1.get(0));
System.out.println(array1[0]);

输出结果:

1
2
4
88
88
66
66

[I@1666b41 //输出是一个引用,因为把输入的array1当成一个元素。
java.lang.ArrayStoreException:java.lang.Integer

以上代码说明,针对对象数组类型,使用Arrays.asList()后,数组和列表连接在一起,更新(第三处)其一,另一个也发生更新。
Arrays.asList()的循环遍历,不适用与基本的数据类型(byte,short,long,int,float,double,boolean,char)。
在需要执行add,remove,clear操作时,需要new一个新的java.util.ArrayList。

其他方法

Arrays类的常用方法
Arrays详解

后记补充

最近在学习《码上高效:java开发手册》,手册中讲到这部分知识,故搬运过来,温故而知新。
在这里插入图片描述

Arrays类中的ArrayList(第一处详解)

在这里插入图片描述
本书将Arrays类中的ArrayList称为李鬼(InnerArrayList)。
数组转集合:
在这里插入图片描述

遍历(第二处详解)

在这里插入图片描述

Arrays类中的set(第三处)

在这里插入图片描述
在这里插入图片描述

集合转数组(新知)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

说明,集合转数组时,
1.不要用toArray()无参方法将集合转数组,这样会导致泛型丢失。
2.toArray(T[] array),数组array的长度=list.size()最合适。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值