/*** * 这篇主要介绍承接上一篇的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); } }