Arrays.asList() 详解

Arrays.asList() 详解1 要点 该方法是将数组转化成 List 集合的方法 List String list Arrays asList a b c 注意 1 该方法适用于对象型数据的数组 String Integer 2 该方法不建议使用于基本数据类型的数组 byte short int long float double boolean 3 该 String

【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()等方法

 

 

【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://javaforall.net/204101.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午9:00
下一篇 2026年3月19日 下午9:00


相关推荐

  • vue $listeners $attr_vue query

    vue $listeners $attr_vue query1、vm.$attrs2.4.0新增类型{[key:string]:string}只读详细包含了父作用域中不作为prop被识别(且获取)的特性绑定(class和style除外)。当一个组件没有声明任何prop时,这里会包含所有父作用域的绑定(class和style除外),并且可以通过v-bind=”$attrs”传入内部组件——在创建高级别的组件时非常有用。简单点讲就是包含了所有父组件在子组件上设置的属性(除了prop传递的属性、class和styl

    2022年10月10日
    5
  • pycharm运行方式

    pycharm运行方式pycharm 运行三种方式 1 以 xx py 脚本方式直接执行 当写的代码里面没用到 unittest 和 pytest 框架时 并且脚本名称不是以 test 开头命名的 此时 pycharm 会以 xx py 脚本方式运行 2 当脚本命名为 test xx py 时 用到 unittest 框架 此时运行代码 pycharm 会自动识别到以 unittest 方式运行 3 以 pytest 方式运行 需要改该工程设置默认的运行器

    2026年3月27日
    2
  • 高并发编程之CopyOnWriteArrayList介绍

    高并发编程之CopyOnWriteArrayList介绍一 CopyOnWriteA 介绍 CopyOnWriteA 写数组的拷贝 支持高效率并发且是线程安全的 读操作无锁的 ArrayList 所有可变操作都是通过对底层数组进行一次新的复制来实现 CopyOnWriteA 适合使用在读操作远远大于写操作的场景里 比如缓存 它不存在扩容的概念 每次写操作都要复制一个副本 在副本的基础上修改后改变 Arr

    2026年3月19日
    2
  • jps查看java进程(进程的等待状态)

    列出PID和Java主类名jps2017Bootstrap2576Jps列出pid和java完整主类名jps-l2017org.apache.catalina.startup.Bootstrap2612sun.tools.jps.Jps列出pid、主类全称和应用程序参数jps-lm2017org.apache.catalina.startup.Boots…

    2022年4月13日
    62
  • caffee2安装 踩坑记录

    caffee2安装 踩坑记录目录 RuntimeError Missingbuild Unableto importyaml RuntimeError Missingbuild Unabletoimpo w2 pythonsetup pyinstallBui 1 1 0a0 d73cacaBu

    2026年3月20日
    1
  • Eclipse–Team–SVN–URL修改

    Eclipse–Team–SVN–URL修改

    2021年9月9日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号