Arrays.asList使用误区。Collections. reverse()函数

本文探讨了Java中使用Collection.reverse()和Arrays.asList()的方法,并强调了一些常见陷阱,如使用基本类型数组时Arrays.asList()的限制及如何正确进行集合操作。
摘要由CSDN通过智能技术生成

/***
 *  这篇主要介绍承接上一篇的Collection.reverse(),Arrays.asList()的应用,以及一些容易不小心出错的点:特别是不能使用
 *   add()和remove(),一定小心
 *  ,不足之处请见谅
 * **/

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static jdk.nashorn.internal.objects.NativeArray.reverse;

public class Solution {
    public static void main(String args[]) {
        int a[] = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        Integer b[] = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
        List list_1 = Arrays.asList(a);
        List<Integer> list_2 = Arrays.asList(b);
        List<String> first = Arrays.asList("a", "b", "c");

        /**
         * 下面两行是偶然发现的一个易错点,参考https://www.cnblogs.com/tina-smile/p/5056174.html#commentform
         * 解释:Arrays.asList()接受一个变长的参数,也就是数组。如果这个参数是基本数据类型像本文中的int[],那么会默认
         * 只传来了一个变量,所以size==1,而且返回的结果是定长的数组不能add()和remove(),为了避免这类错误,我们实际应减少对基本类型使用这种方法
         */
        System.out.println(list_1.size());    //这一行输出为 1,不是10!!!
        System.out.println(list_2.size());   //这一行输出为10,Integer属于包装类型了,不是基本类型
        /***
         *   下面两行两行将报错,因为asList()返回的是私有的ArrayList类型,Arrays.asList()返回的是List,而且是一个定长的List,
         *   大小不能修改,但是contains(),set(),get 函数可用,非要使用就必须强制第转化成list,非要使用就强制转化
         *   参见https://blog.csdn.net/keketrtr/article/details/47108435
         *   public static <T> List<T> 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异常的!
         * */
        // list_2.add(-1);
        // list_2.remove(1);
        list_2.set(1, -10);
        System.out.println(list_2);
        ArrayList<Integer> list = new ArrayList<>(Arrays.asList(b));          //非要使用就强制转化
        list.add(100);
        System.out.println(list);
        //Collection.reverse()可以翻转字符串,注意String没有reverse()方法
        System.out.println(new StringBuilder("123456789-").reverse().toString());

     //翻转函数
        ArrayList<Integer> m = new ArrayList<>();
        m.add(-1);        m.add(-10);
        m.add(-100);
        m.add(-1001);
        Collections.reverse(m);
        System.out.println(m);
    }
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值