8.4.3 固定长度的List

8.4.3 固定长度的List

将数组转成List集合

前面讲数组时介绍了一个操作数组的工具类: Arrays,Arrays工具类里提供了asList方法:

ArraysasList方法 描述
static <T> List<T> asList(T... a) Returns a fixed-size list backed by the specified array.

该方法可以把一个数组或指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例

Arrays.ArrayList内部类

Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素
如下程序所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.*;

public class FixedSizeList {
public static void main(String[] args) {
List fixedList = Arrays.asList("疯狂Java讲义", "轻量级Java EE企业应用实战");
// 获取fixedList的实现类,将输出Arrays$ArrayList
System.out.println(fixedList.getClass());
// 使用方法引用遍历集合元素
fixedList.forEach(System.out::println);
// 试图增加、删除元素都会引发UnsupportedOperationException异常
fixedList.add("疯狂Android讲义"); // 代码1
fixedList.remove("疯狂Java讲义"); // 代码2
}
}

运行效果如下:

1
2
3
4
5
6
7
class java.util.Arrays$ArrayList
疯狂Java讲义
轻量级Java EE企业应用实战
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at FixedSizeList.main(FixedSizeList.java:11)

不要增加或删除Arrays.ArrayList内部类

上面程序中代码1,代码2这两行代码对于普通的List集合完全正常,但如果试图通过这两个方法来增加删除Arrays.ArrayList集合里的元素,将会引发异常。
所以上面程序在编译时完全正常,但会在运行代码1处引发UnsupportedOperationException异常。