Arrays.asList 无法 remove问题

201 阅读1分钟

错误示例代码

public static void main(String[] args) {
    List<String> list = Arrays.asList(StringUtils.tokenizeToStringArray("1,2,3,4,5", ","));
    list.remove(2);
}

报错内容

Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:161) at com.leelen.cloud.cb.TestRSASign.main(TestRSASign.java:49)

image.png

正确示例代码

改为 new ArrayList(Arrays.asList(StringUtils.tokenizeToStringArray("1,2,3,4", ",")))

public static void main(String[] args) {
    List<String> list = new ArrayList(Arrays.asList(StringUtils.tokenizeToStringArray("1,2,3,4", ",")));
    list.remove(2);
    System.out.println(list);

}

输出结果

[1, 2, 4]

原因

Arrays.asList 函数返回的是 Arrays的内部类,而不是 java.util 包下的 ArrayList 类。

两者的共同点: 同样继承自 AbstractList 类