Arrays.asList()方法介绍

转载 2012年03月26日 21:09:02

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。

Arrays.asList方法总结

import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演...
  • cntanghai
  • cntanghai
  • 2012年01月09日 19:14
  • 82315

Array.asList:数组转list时你一定要知道的“陷阱”!

最近开发中,业务上处理,经常用到asList方法,这让我不经想起了它的很多容易让人犯错的地方或者误解的地方,所以就想抽出时间来,整理一下,和大家分享出来,深夜了,话不多说,主要以代码为主,简易的代码,...
  • chenleixing
  • chenleixing
  • 2015年02月12日 22:57
  • 27853

Array.asList的使用方法

总结: 1. 把一般数组用Array.asList转为List 2. 转为的List更新时,原来的数组也会跟着更新 3. 基本类型数组转为的List更新时,会报错,而对象类型的不会 packa...
  • sinat_30271677
  • sinat_30271677
  • 2016年10月25日 12:24
  • 1061

Java中Arrays的asList()方法

Java中Arrays的asList()方法 可以将 数组转为List 但是,这个数组类型必须是 引用类型的,如果是8中基本数据类型就不可以 原因如下,引用别人的一篇文章: 最近...
  • Anders_Zhuo
  • Anders_Zhuo
  • 2013年05月22日 16:22
  • 19346

Arrays.asList()源码剖析

将一个数组转化为一个List对象,一般会想到Arrays.asList()方法,这个方法会返回一个ArrayList类型的对象。但是用这个对象对列表进行添加删除更新操作,就会报UnsupportedO...
  • bruce128
  • bruce128
  • 2014年03月20日 19:18
  • 2979

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

在平时的开发过程中,我们知道可以将一个Array的对象转化为List。这样的操作,我们只要采用Arrays.asList这个方法就行了。笔者前段时间一直用这个方法,有一天,我发现通过Arrays.as...
  • loveaborn
  • loveaborn
  • 2014年10月03日 10:27
  • 11745

Array.asList:数组转list时你一定要知道的“陷阱”!

最近开发中,业务上处理,经常用到asList方法,这让我不经想起了它的很多容易让人犯错的地方或者误解的地方,所以就想抽出时间来,整理一下,和大家分享出来,深夜了,话不多说,主要以代码为主,简易的代码,...
  • chenleixing
  • chenleixing
  • 2015年02月12日 22:57
  • 27853

Arrays.asList传入参数的问题

Arrays.asList传参问题 java varargs与auto boxing
  • champgauss
  • champgauss
  • 2015年12月05日 10:50
  • 1405

工具类Arrays.asList();方法的一些坑

关于Arrays.asList();方法一些需要注意的地方
  • dzgt10076
  • dzgt10076
  • 2017年03月30日 12:19
  • 212

关于Arrays.asList(T... a)方法的使用注意事项

import java.util.Arrays; import java.util.List; public class ArraysDemo { public static void mai...
  • Geek_ymv
  • Geek_ymv
  • 2014年07月25日 21:51
  • 870
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Arrays.asList()方法介绍
举报原因:
原因补充:

(最多只允许输入30个字)