Arrays.asList()返回一个List,但是这种情况下,其底层的实现是一个final数组,因此不能调整其尺寸

如下代码片段:

package chapter11.t1;

import java.util.*;

public class AddingGroups {

public static void main(String[] args) {

List list = Arrays.asList(1,2,3,4,5);

list.add(6);

}

}

通过Arrays.asList()生成list对象,然后再向list中添加元素6,程序报错如下:

Exception in thread "main" java.lang.UnsupportedOperationException

at java.util.AbstractList.add(AbstractList.java:148)

at java.util.AbstractList.add(AbstractList.java:108)

at chapter11.t1.AddingGroups.main(AddingGroups.java:8)

看下Arrays类的源码如下:

asList()方法返回一个内部类ArrayList的对象

public static List asList(T... a) {

return new ArrayList<>(a);

}

下面看下Arrays类中的ArrayList内部类的源码:

private static class ArrayList extends AbstractList

implements RandomAccess, java.io.Serializable

{

private static final long serialVersionUID = -2764017481108945198L;

private final E[] a;

ArrayList(E[] array) {

a = Objects.requireNonNull(array);

}

@Override

public int size() {

return a.length;

}

@Override

public Object[] toArray() {

return a.clone();

}

@Override

@SuppressWarnings("unchecked")

public T[] toArray(T[] a) {

int size = size();

if (a.length < size)

return Arrays.copyOf(this.a, size,

(Class extends T[]>) a.getClass());

System.arraycopy(this.a, 0, a, 0, size);

if (a.length > size)

a[size] = null;

return a;

}

@Override

public E get(int index) {

return a[index];

}

@Override

public E set(int index, E element) {

E oldValue = a[index];

a[index] = element;

return oldValue;

}

@Override

public int indexOf(Object o) {

E[] a = this.a;

if (o == null) {

for (int i = 0; i < a.length; i++)

if (a[i] == null)

return i;

} else {

for (int i = 0; i < a.length; i++)

if (o.equals(a[i]))

return i;

}

return -1;

}

@Override

public boolean contains(Object o) {

return indexOf(o) != -1;

}

@Override

public Spliterator spliterator() {

return Spliterators.spliterator(a, Spliterator.ORDERED);

}

@Override

public void forEach(Consumer super E> action) {

Objects.requireNonNull(action);

for (E e : a) {

action.accept(e);

}

}

@Override

public void replaceAll(UnaryOperator operator) {

Objects.requireNonNull(operator);

E[] a = this.a;

for (int i = 0; i < a.length; i++) {

a[i] = operator.apply(a[i]);

}

}

@Override

public void sort(Comparator super E> c) {

Arrays.sort(a, c);

}

}

该内部类的构造方法如下:

ArrayList(E[] array) {

a = Objects.requireNonNull(array);

}

也就是说Arrays.asList()返回一个final数组,因此不可以改变次数组的大小。当我们试图用add()或delete()方法在这种列表中添加或删除元素的时候,会引发数组尺寸的改变。因此在运行时会抛java.lang.UnsupportedOperationException不支持的操作这样的异常。

java中的asList_Java中的Arrays.asList()方法相关推荐

  1. java中的asList_java中的Arrays.asList()浅析

    1.Arrays.asList(T..)使用的是静态内部类:ArrayList, (没有定义add和remove等一些方法),而不是java.util.ArrayList /** * 1.测试Arra ...

  2. java中的asList_java中Arrays.asList的使用

    Arrays.asList()方法的作用是将数组或一些元素转为集合,而你得到的集合并不是我们通常使用的List集合,而是Arrays里面的一个内部类.阿里的开发手册上java开发规范说到使用工具类Ar ...

  3. java 集合数组初始化_Java用Arrays.asList初始化ArrayList实例方法

    Java用Arrays.asList初始化ArrayList实例方法 发布于 2020-2-29| 复制链接 在本篇文章里小妖给大家分享的是关于Java中使用Arrays.asList初始化Array ...

  4. Java Arrays.asList()方法详解

    本文是对Arrays.asList()方法从源码角度进行分析,解析使用中的一些困惑. 首先看Arrays.asList()的源码 public static <T> List<T&g ...

  5. 【java】数组转list用arrays.aslist报错

    现象: 数组转List用arrays.asList方法,只能用于获取数组长度,不能从转成的List中使用add和remove方法 报错:java.lang.UnsupportedOperationEx ...

  6. 浅谈Arrays.asList()方法

    一.引言: 实际操作中,我们会遇到需要将数组转化为list的情况,这个时候我们可以借助Java的Arrays类的方法进行便捷操作,接下来来看以下操作的例子: Integer[] arr= {1, 2, ...

  7. 浅谈Arrays.asList()方法的使用

    浅谈Arrays.asList()方法的使用 首先,该方法是将数组转化为list.有以下几点需要注意: (1)该方法不适用于基本数据类型(byte,short,int,long,float,doubl ...

  8. java arrays.aslist()_Java中Arrays.asList()方法详解及实例

    Arrays.asList() 是将数组作为列表. 问题来源于: public class Test { public static void main(String[] args) { int[] ...

  9. Arrays.asList方法总结

    作用 : Arrays.asList() 将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是 ...

最新文章

  1. ECLIPSE配置MAVEN
  2. 【软件测试】4、测试用例的设计
  3. 【传智播客】Javaweb程序设计任务教程 黑马程序员 第四章 课后答案
  4. mysql默认数据库名称,默认的MySQL数据库名称
  5. 2017年游戏营收报告公布,谁是去年最大的赢家?
  6. 软件配置管理(六)常用配置软件配置工具指令
  7. iOS开发UI篇—实现一个私人通讯录小应用(一)
  8. 通俗的说这是一个一对多的例子,看看人家是怎么做的!
  9. 2019年春季学习第七周学习总结
  10. matlab画漫画,震惊!无聊男子竟用函数画出可爱的卡通猫
  11. PS修皮肤去痘痘毛孔,只需要掌握这个技巧就够了
  12. 从苏炳添的学术论文中,看看如何写论文
  13. PX4 FMU [17] stabilize
  14. python 多线程内子线程结束后执行主线程
  15. 女生可以做软件测试吗?
  16. 塔夫斯大学计算机专业,塔夫茨大学优势专业
  17. Python有参函数和无参函数实例
  18. python网络编程学什么_python网络编程学习《一》
  19. 简单说说 OSChina 的技术架构
  20. 无聊的小明来数1 (5 分)...按位与

热门文章

  1. centos7 安装git_Centos7.4 Yapi 服务搭建
  2. 重庆大学 计算机组成原理,重庆大学计算机组成原理集(含部分)解决方案.doc
  3. hive sql 怎么实现循环_Hive存储过程实现-hpsql
  4. 【转】事务和锁机制是什么关系? 开启事务就自动加锁了吗?
  5. 【转】RocketMQ的一些特性(生产者消费者配置参数的含义)
  6. MVC和WebForm区别
  7. Windows Workflow Foundation(WWF)介绍
  8. 一步步编写操作系统 59 cpu的IO特权级1
  9. 查看linux不显示ip,linux系统查看IP地址,不显示IP地址或者只显示127.0.0.1
  10. android 加载网络bitmap图片 oom 简书_Android常见问题--ImageView加载图片OOM