关闭

Arrays.asList()方法介绍

标签: listcollectionsarraysjavastring优化
4780人阅读 评论(1) 收藏 举报
分类:

Arrays和Collections包含的都是static方法,可以将其视为工具类。Arrays.asList()这个方法有点特殊,这里记录一下。

  首先,Arrays.asList()返回的是一个List (List是一个接口,返回List实际是返回List接口的一个实现),这个List在底层是有数组实现的,所以size是fixed的。所以,下面的代码是不可以的:

Java代码  收藏代码
  1. List<Integer> list = Arrays.asList(123);  
  2. list.add(4); //error  

 

  其次,如果不指定返回List的类型(即<>部分)的话,Arrays.asList()对其返回List的类型有自己的判断,可以视为它自身的一种优化机制,如下所示:

Java代码  收藏代码
  1. // Arrays.asList() makes its best guess about type.  
  2.   
  3. import java.util.*;  
  4.   
  5. class Snow {}  
  6.   
  7. class Powder extends Snow {}  
  8. class Crusty extends Snow {}  
  9. class Slush extends Snow {}  
  10.   
  11. class Light extends Powder {}  
  12. class Heavy extends Powder {}  
  13.   
  14. public class AsListInference   
  15. {  
  16.     public static void main(String[] args)   
  17.     {  
  18.         List<Snow> snow1 = Arrays.asList(new Crusty(), new Slush(), new Powder()); //pass  
  19.   
  20.         //List<Snow> snow2 = Arrays.asList(new Light(), new Heavy()); //error  
  21.         List<Powder> snow2 = Arrays.asList(new Light(), new Heavy()); //pass  
  22.           
  23.         List<Snow> snow3 = Arrays.asList(new Light(), new Crusty()); //pass  
  24.   
  25.         List<Snow> snow4 = new ArrayList<Snow>();  
  26.         Collections.addAll(snow4, new Light(), new Heavy()); //pass  
  27.   
  28.         List<Snow> snow5 = Arrays.<Snow>asList(new Light(), new Heavy()); //pass  
  29.     }  
  30. }  

  snow1添加3个Snow的导出类对象,没有问题。

  snow2添加2个Snow的导出类对象,按理也是可以的,不过由于它们都是Powder,所以Arrays.asList()返回的是一个List<Powder>。可见Arrays.asList()返回的是精确类型的list。

  snow3混合添加,也没有问题。

  snow4不用Arrays.asList(),使用Collections.addAll(),就没有snow2中的局限了。

  如果一定要Arrays.asList(new Light(), new Heavy())返回List<Snow>而不是List<Powder>,可以用Arrays.<Snow>asList()来强制产生List<Snow>,如snow5。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:298315次
    • 积分:3572
    • 等级:
    • 排名:第9217名
    • 原创:76篇
    • 转载:59篇
    • 译文:3篇
    • 评论:46条
    最新评论