课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > Java数组转换为List的方法
  • Java数组转换为List的方法

    发布:昆明Java培训      来源:达内新闻      时间:2016-02-28


  • 昆明java培训觉得不幸的是并不是每件事都尽如人意。举个例子,现在将一个Java数组转换为List

    当然,我们可以使用Arrays.asList方法,但是如果没有慎重思考就随便使用几乎肯定会产生令人讨厌的意外。考虑完下面这段程序并预测其输出你就明白昆明java培训小编的意思了:

    package com.wordpress.mlangc.arrays;

    import java.util.Arrays;

    public class ArraysToList

    {

    public static void main(final String[] args)

    {

    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 String[] { "a", "b" }, "c"));

    }

    }

    由于JavadocArrays.asList的说明相当模糊,对你来说预测出程序的运行结果可能有点困难,下面我们来一步步的揭晓答案:

    9行就像我们根据API所预测的那样在我们的控制台输出了“[a,b]”,这正是我们乐意看到的。

    12行也一样如预期那样输出了“[1,2]”。

    15行就不同了,当然这里不是说1512的不同,而是一个是int另一个是Integer,因此在我们的控制台打印出了类似这样的结果“[[I@39172e08]”,这就不再如预期那样了。我们得到一个包含数组中标识每个元素唯一性的地址串的list,而不是包含两个Integer对象的list

    看到上面的结果后,对于第18行输出的类似“[[Ljava.lang.String;@20cf2c80, c]”这样的结果就不会感到惊奇了。

    但是发生了什么呢?前两个打印语句与我们预期的结果相同,因Java语言规范规定了调用一个声明为foo(T t)的方法,比如foo(new T[]{bar,baz})等同于foo(bar,baz)这样的调用。在Arrays.asList方法中T是参数类型,因此它必须为一个Object 类型,但是int不是,而int[]却是。这就是为什么第16行的声明等同于 Arrays.asList(new Object[] { new int[] { 1, 2 } })

    Arrays.asList(new Object[] { new int[] { 1, 2 } })

    最后也是非常重要的一点,在第19行的声明从一开始就产生了调用问题。我们告诉编译器我们需要一个包含String数组和字符串的list,正如我们预期的那样我们得到了我们想要的东西。

    到现在为止解释了这么多,但是我们还可以从中学到更多的东西:问题的真正来源并不是可变参数设计的很糟糕;相反的我认为这个设计很好。

    下面是在将数组转换为lists的时候我们需要遵循的规则,做到这些可以确保没有任何意外的情况发生:

    如果你要将一个数组转换为list时仅仅是要将其转换为一个string,那么最好使用Arrays.toString代替上面的方法吧。即使对于基本类型的数组该方法也不会出现任何问题。

    如果你打算将一个基本类型的数组转换为所对应的封装类型的list,使用Apache Commons Lang吧,可能你的项目正在使用它,类似下面这样使用ArrayUtils.toObject

    List list = Arrays.asList(ArrayUtils.toObject(new int[] { 1, 2 }));

    请注意:一般情况下推荐使用原始数据类型数组而不是装箱后的原始数据类型列表。

    如果你打算将一个引用类型的数组转换为list,可以直接使用Arrays.asList

    List list = Arrays.asList(new String[] { "a", "b" });

    昆明java培训小编温馨提示,不要忘了告诉和你一起工作的人以确保他们不和你犯同样的错误。当然,你也可以选择仅仅记住那些使用Arrays.asList方法时可能出现问题的地方,并使用普通的for循环来代替,但是那会使你的代码很杂乱,还会带来性能方面的问题。

    推荐文章

上一篇:java类的生命周期

下一篇:Java SE功能/API介绍

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56