知识点:
-
该方法适用于对象型数据的数组(String、Integer…),如果使用的是基本数据类型,则会把基本数据类型的数组作为一个元素存储到新集合中,新生成的集合只有一个元素,就是该数组的地址值
-
该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新;
-
不支持add()、remove()、clear()等方法
这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!
测试代码
package com.yangmin.study.集合;
import java.util.Arrays;
import java.util.List;
/**
* @author yangmin
* @version 1.0
* @description: Arrays.asList()
*
* (1)该方法适用于对象型数据的数组(String、Integer...)
*
* (2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean),
*
* (3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新
*
* (4)不支持add()、remove()、clear()等方法
*
* @date 2022/5/6 16:14
*/
public class Demo1 {
/**
* @param args
*/
public static void main(String[] args) {
String[] strings = {"aa", "bb", "cc"};
List<String> stringList = Arrays.asList(strings);
System.out.print("1、String类型数组使用asList(),正常: ");
for (String str : stringList) {
System.out.print(str + " ");
}
System.out.println();
Integer[] integers = new Integer[]{1, 2, 3};
List<Integer> integerList = Arrays.asList(integers);
System.out.print("2、对象类型的数组使用asList(),正常: ");
for (int i : integerList) {
System.out.print(i + " ");
}
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[] intArr = (int[]) intList.get(0);
for (int i : intArr) {
System.out.print(i+"");
}
//4、当更新数组或者List,另一个将自动获得更新
System.out.print("4、当更新数组或者List,另一个将自动获得更新: ");
integerList.set(0, 5);
System.out.print("integerList: ");
for (Object o : integerList) {
System.out.print(o + " ");
}
System.out.print("integers: ");
for (Object o : integers) {
System.out.print(o + " ");
}
System.out.println();
/**
* 这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList
*
* 它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。
*
* 而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!
*/
//5、add() remove() 报错
System.out.println("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
这样遍历才能正确输出:1234、当更新数组或者List,另一个将自动获得更新: integerList: 5 2 3 integers: 5 2 3
5、add() remove() 报错:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at com.yangmin.study.集合.Demo1.main(Demo1.java:85)
Process finished with exit code 1