arrays.asList()

本文详细介绍了Java中Arrays类的asList方法,包括其在基本数据类型和对象数组中的使用特性,以及如何在更新数组或列表时保持两者同步。同时探讨了asList返回的列表为何不支持add和remove方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. import java.util.Arrays;  
    import java.util.List;  
      
    /** 
     *  
     * 本类演示了Arrays类中的asList方法 
     * 通过四个段落来演示,体现出了该方法的相关特性. 
     *  
     * (1) 该方法对于基本数据类型的数组支持并不好,当数组是基本数据类型时不建议使用 
     * (2) 当使用asList()方法时,数组就和列表链接在一起了. 
     *     当更新其中之一时,另一个将自动获得更新。 
     *     注意:仅仅针对对象数组类型,基本数据类型数组不具备该特性 
     * (3) asList得到的数组是的没有add和remove方法的 
     *  
     * 阅读相关:通过查看Arrays类的源码可以知道,asList返回的List是Array中的实现的 
     * 内部类,而该类并没有定义add和remove方法.另外,为什么修改其中一个,另一个也自动 
     * 获得更新了,因为asList获得List实际引用的就是数组 
     */  
    public class AsListTest {  
      
        public static void main(String[] args) {  
      
            /* 段落一:基本数据类型使用asList中的问题 */  
      
            /* 说明:虽然在JDK1.6中能够将基本数据类型的数组转换成List,但还是有个缺陷 */  
            int[] a_int = { 1, 2, 3, 4 };  
            /* 预期输出应该是1,2,3,4,但实际上输出的仅仅是一个引用, 这里它把a_int当成了一个元素 */  
            List a_int_List = Arrays.asList(a_int);  
            foreach(a_int_List);  
            /* 为此我们需要这样遍历其中元素 */  
            foreachForBase(a_int_List);  
      
            /* 段落二:对象类型的数组使用asList,是我们预期的 */  
            Integer[] a_Integer = new Integer[] { 1, 2, 3, 4 };  
            List a_Integer_List = Arrays.asList(a_Integer);  
            foreach(a_Integer_List);  
      
            /* 段落三:当更新数组或者asList之后的List,另一个将自动获得更新 */  
            a_Integer_List.set(0, 0);  
            foreach(a_Integer_List);  
            foreach(a_Integer);  
      
            a_Integer[0] = 5;  
            foreach(a_Integer_List);  
            foreach(a_Integer);  
      
            /* 段落四:对基本类型数组,通过asList之后的List修改对应的值后,在运行时会报出异常  
             * 但是基本类型数组对应的List是会发生变化的,这是毫无疑问的 
             */  
              
            /* 
             * a_int_List.set(0, 0);  
             * foreach(a_int_List); foreach(a_int); 
             */  
      
            a_int[0] = 5;  
            foreachForBase(a_int_List);  
            foreach(a_int);  
      
        }  
      
        /* 打印方法 */  
        private static void foreach(List list) {  
            for (Object object : list) {  
                System.out.print(object + " ");  
            }  
            System.out.println();  
      
        }  
      
        private static void foreachForBase(List a_int_List) {  
            int[] _a_int = (int[]) a_int_List.get(0);  
            foreach(_a_int);  
        }  
      
        private static void foreach(int[] a_int) {  
            for (int i : a_int) {  
                System.out.print(i + " ");  
            }  
            System.out.println();  
        }  
      
        private static void foreach(Integer[] _a_Integer) {  
            for (int i : _a_Integer) {  
                System.out.print(i + " ");  
            }  
            System.out.println();  
        }  
    }



转载于:https://my.oschina.net/91jason/blog/295357

Arrays.asList方法是Java中的一个工具方法,它将传入的参数转换为一个固定长度的List集合。 这个方法接受一个可变参数,即任意数量的对象,并返回一个包含这些对象的List。 这个方法的作用是可以将数组或其他可迭代对象转换为List对象,方便进行操作和使用。 需要注意的是,返回的List是一个固定长度的List,也就是说不能进行增删元素的操作。这是因为asList方法返回的List实际上是Arrays类中的一个内部类Arrays.ArrayList,而不是java.util包中的ArrayList类。 这个内部类继承自AbstractList类,虽然具有List接口的一些方法,但是并没有实现增删元素的方法,所以无法进行增删操作。如果需要对返回的List进行增删操作,可以将其转换为ArrayList,例如通过new ArrayList<>(Arrays.asList(...))的方式进行转换。 此外,需要注意的是,asList方法返回的List是一个固定长度的List,即不能改变其长度。如果进行了增删元素的操作,可能会导致不可预知的结果。所以在使用asList方法时,需要注意不要对返回的List进行增删操作,或者在需要增删操作时将其转换为ArrayList来操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Arrays.asList() 详解](https://blog.csdn.net/kzadmxz/article/details/80394351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值