java Arrays.asList 问题

1.问题

public static void asList() {
        System.out.println(Arrays.asList(new String[] { "a", "b" }));

        System.out.println(Arrays.asList(new Integer[] { 1, 2 }));

        System.out.println(Arrays.asList(new int[] { 1, 2 }));  
        System.out.println(Arrays.asList(new Object[] { new int[] { 1, 2 } }));
       System.out.println(Arrays.asList(new String[] { "a", "b" }, "c"));

     //正确方式 apache common lang
      System.out.println(Arrays.asList(ArrayUtils.toObject(new int[] { 1, 2 })));
 }

[a, b]
[1, 2]
[[[email protected]]

[[[email protected]]

[[Ljava.lang.String;@2077d4de, c]

[1, 2]

Java语言规范规定了调用一个声明为foo(T… t)的方法,比如foo(new T[]{bar,baz})等同于foo(bar,baz)这样的调用。在Arrays.asList方法中T是参数类型,

因此它必须为一个Object 类型,但是int不是,而int[]却是。Arrays.asList作为一个反面教材,告诉了我们在使用Java的可变参数设计API时为什么要非常小心。

参考:

http://www.importnew.com/14996.html

时间: 2024-10-16 12:08:52

java Arrays.asList 问题的相关文章

java Arrays.asList的用法

import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相关特性. * * (1) 该方法对于基本数据类型的数组支持并不好,当数组是基本数据类型时不建议使用 * (2) 当使用asList()方法时,数组就和列表链接在一起了. *     当更新其中之一时,另一个将自动获得更新. *     注意:仅仅针对对象数组类型,基本数据类型数组不具备该特性 * (

java Arrays.asList

List<String> list = Arrays.asList("A B C D E F G H I J K L ".split(" ")); 1. java中Arrays.asList生成的集合是属于Arrays中内部类,这个内部类不支持各种 removeAll  retainAll 操作,会抛出 java.lang.UnsupportedOperationException 异常.因为Arrays.asList就表示生成固定大小的数组的集合,任何

java——Arrays.asList()方法

Arrays.asList() 是将数组作为列表 问题来源于: public class Test { public static void main(String[] args) { int[] a = {1,2,3,4}; List list = Arrays.asList(a); System.out.println(list.size()); //1 } } 期望的输出是 list里面也有4个元素,也就是size为4,然而结果是1. 原因如下: 在Arrays.asList中,该方法接受

【Java基础】一个有意思的泛型方法Arrays.asList(T... a)

总结 利用Arrays.asList方法返回的List是不允许add和remove的,这种list的长度不可变,因为底层依然是写数组. Arrays.asList的返回值是调用是传入T类型的List,所以传入啥,返回啥的列表 T... a 底层本来就是转换为T[] x的数组,所以如果传入的T是数组,最后的底层参数是二维数组T[][] y. Arrays.asList(T... a)方法的作用 将数组转为集合的方法,返回的是List集合.和Collection的toArray对应,是数组和集合间相

为什么Java里的Arrays.asList不能用add和remove方法?

在平时的开发过程中,我们知道可以将一个Array的对象转化为List.这样的操作,我们只要采用Arrays.asList这个方法就行了.笔者前段时间一直用这个方法,有一天,我发现通过Arrays.asList得到的List无法进行add和remove等操作. 下面是一段很简单的测试代码: public class MainFacade { public static void main(String[] args) { List<Integer> list = Arrays.asList(1,

【转】java.util.Arrays.asList 的用法

DK 1.4对java.util.Arrays.asList的定义,函数参数是Object[].所以,在1.4中asList()并不支持基本类型的数组作参数. JDK 1.5中,java.util.Arrays.asList的定义,函数参数是Varargs, 采用了泛型实现.同时由于autoboxing的支持,使得可以支持对象数组以及基本类型数组. 不过在使用时,当传入基本数据类型的数组时,会出现小问题,会把传入的数组整个当作返回的List中的第一个元素,例如: public static vo

java使用Arrays.asList快速创建List集合

程序中某段案例代码如下: Map<String, List<CronTrigger>> tMap = new HashMap<String, List<CronTrigger>>(); tMap.put(name, Arrays.asList(new CronTrigger[] { trigger })); 程序运行抛出异常:java.lang.UnsupportedOperationException 错误原因: 为了快速创建List而使用了Arrays.

java神坑系列——Arrays.asList

java神坑系列--第二版 Arrays.asList 数组转list是java程序员经常要用的一个方法,但是这也有一个大坑------上题 这个输出什么 ,很多人期待是[1, 2, 3,4]  .但是 但是并不是.而报编译错误. 掉坑里了吧!看源码 感觉没错呀!可是此ArrayList非彼ArrayList ,    java.util.Arrays.ArrayList.ArrayList 它是array类的一个内部类!掉坑里了吧!哈哈 ing 坑主你好! 如果想用数组转list还要添加数据的

Java之Arrays.asList陷阱

http://www.cnblogs.com/treerain/p/Java_Arrays_asList.html Java.Util.Arrays可以将数组转换为List,具体的定义如下: @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } 可以看到实际上是将这个数组转换成为了ArrayList<>,看似没有问题,但是当我们使用add和re