Arrays.asList() 详解
创始人
2024-05-13 20:55:02

【1. 要点】

 该方法是将数组转化成List集合的方法。

 List list = Arrays.asList("a","b","c");

注意:

(1)该方法适用于对象型数据的数组(String、Integer...)

(2)该方法不使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)

(3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新

(4)不支持add()remove()clear()等方法

注意:参数必须是对象或者对象数组

Arrays.asList()参数必须是对象或者对象数组

错误做法:使用基础类型

int[] it = {1,2,3};
List ints = Arrays.asList(it);
System.out.println(ints);输出为[[I@59f95c5d]

正确做法:使用int的包装类Integer

Integer[] it = {1,2,3};
List ints = Arrays.asList(it);
System.out.println(ints);输出为[1, 2, 3]

【2.Arrays.asList()是个坑】

用此方法得到的List的长度不可改变的,

当你向这个List添加或删除一个元素时(例如 list.add("d");)程序就会抛出异常(java.lang.UnsupportedOperationException)。 怎么会这样?只需要看看asList()方法是怎么实现的就行了:

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

当你看到这段代码时可能觉得没啥问题啊,不就是返回了一个ArrayList对象吗?问题就出在这里。

这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList

它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。

AbstractList中的add()remove()直接抛出java.lang.UnsupportedOperationException异常的!

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

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

总结:如果你的List只是用来遍历,就用Arrays.asList()

           如果你的List还要添加或删除元素,还是乖乖地new一个java.util.ArrayList,然后一个一个的

           添加元素。
 

【3.示例代码】

package cn.wyc;import java.util.Arrays;
import java.util.List;public class Test {public static void main(String[] args){//1、对象类型(String型)的数组数组使用asList(),正常String[] strings = {"aa", "bb", "cc"};List stringList = Arrays.asList(strings);System.out.print("1、String类型数组使用asList(),正常:  ");for(String str : stringList){System.out.print(str + " ");}System.out.println();//2、对象类型(Integer)的数组使用asList(),正常Integer[] integers = new Integer[] {1, 2, 3};List integerList = Arrays.asList(integers);System.out.print("2、对象类型的数组使用asList(),正常:  ");for(int i : integerList){System.out.print(i + " ");}
//        for(Object o : integerList){
//            System.out.print(o + " ");
//        }System.out.println();//3、基本数据类型的数组使用asList(),出错int[] ints = new int[]{1, 2, 3};List intList = Arrays.asList(ints);System.out.print("3、基本数据类型的数组使用asList(),出错(输出的是一个引用,把ints当成一个元素了):");for(Object o : intList){System.out.print(o.toString());}System.out.println();System.out.print("   " + "这样遍历才能正确输出:");int[] ints1 = (int[]) intList.get(0);for(int i : ints1){System.out.print(i + " ");}System.out.println();//4、当更新数组或者List,另一个将自动获得更新System.out.print("4、当更新数组或者List,另一个将自动获得更新:  ");integerList.set(0, 5);for(Object o : integerList){System.out.print(o + " ");}for(Object o : integers){System.out.print (o + " ");}System.out.println();//5、add()   remove() 报错System.out.print("5、add()   remove() 报错:  ");
//        integerList.remove(0);
//        integerList.add(3, 4);
//        integerList.clear(); }}

输出:

1、String类型数组使用asList(),正常:  aa bb cc 
2、对象类型的数组使用asList(),正常:  1 2 3 
3、基本数据类型的数组使用asList(),出错(输出的是一个引用,把ints当成一个元素了):[I@1540e19d这样遍历才能正确输出:1 2 3 
4、当更新数组或者List,另一个将自动获得更新:  5 2 3 5 2 3 
5、add()、remove()、clear() 报错: 

参考:https://blog.csdn.net/kzadmxz/article/details/80394351

           Arrays.asList作用和使用注意事项_寒_川的博客-CSDN博客_arrays.aslist

相关内容

热门资讯

卢东亮主持召开座谈会 卢东亮主持召开座谈会征求对政府工作报告和“十五五”规划纲要的意见建议近日,省长卢东亮主持召开座谈会,...
以军战后创伤与自杀率大幅上升 ... 转自:央视新闻  当地时间16日,总台记者获悉,随着加沙、黎巴嫩和叙利亚多线冲突持续,以色列军队中创...
刮刮乐“丙午马”生肖票温情上市   金马报喜,福彩送福。值此新春佳节来临之际,中国福利彩票“丙午马”生肖主题系列即开票温情上市。这不...
中俄市长冰城“论道” 以冰雪为...   ■本报记者 刘述波  1月16日,首届中俄市长圆桌会议在哈市召开。来自中俄13个冰雪产业重点城市...
恒指牛熊街货比(67:33)︱... 截至1月17日,恒指最新的牛熊街货比例为67:33。中信证券牛熊证街货分布图中的数据显示,熊证街货重...