最近开发中,业务上处理,经常用到asList方法,这让我不经想起了它的很多容易让人犯错的地方或者误解的地方,所以就想抽出时间来,整理一下,和大家分享出来,深夜了,话不多说,主要以代码为主,简易的代码,你一看就知道了!

大家都知道这个方法是将数组转成list,是JDK中java.util包中Arrays类的静态方法。大家使用时一定要注意(请看代码和注释,一看就明了了):

  1. String s[]={"aa","bb","cc"};
  2. List<String> sList=Arrays.asList(s);
  3. for(String str:sList){//能遍历出各个元素
  4. System.out.println(str);
  5. }
  6. System.out.println(sList.size());//为3
  7. System.out.println("- - - - - - - - - - -");
  8. int i[]={11,22,33};
  9. List intList=Arrays.asList(i);  //intList中就有一个Integer数组类型的对象,整个数组作为一个元素存进去的
  10. for(Object o:intList){//就一个元素
  11. System.out.println(o.toString());
  12. }
  13. System.out.println("- - - - - - - - - - -");
  14. Integer ob[]={11,22,33};
  15. List<Integer> objList=Arrays.asList(ob);  //数组里的每一个元素都是作为list中的一个元素
  16. for(int a:objList){
  17. System.out.println(a);
  18. }
  19. System.out.println("- - - - - - - - - - -");
  20. //objList.remove(0);//asList()返回的是arrays中私有的终极ArrayList类型,它有set,get,contains方法,但没有增加和删除元素的方法,所以大小固定,会报错
  21. //objList.add(0);//由于asList返回的list的实现类中无add方法,所以会报错

输入结果:

  1. aa
  2. bb
  3. cc
  4. 3
  5. - - - - - - - - - - -
  6. [I@287efdd8
  7. - - - - - - - - - - -
  8. 11
  9. 22
  10. 33
  11. - - - - - - - - - - -

之所以有以上原因,看看asList的源码就明白了:

  1. public static <T> List<T> asList(T... a) {
  2. return new ArrayList<T>(a);
  3. }
  1. private final E[] a;
  2. ArrayList(E[] array) {
  3. if (array==null)
  4. throw new NullPointerException();
  5. a = array;
  6. }

如果想根据数组得到一个新的正常的list,当然可可以循环一个一个添加,也可以才有以下2个种方法:

  1. ArrayList<Integer> copyArrays=new ArrayList<Integer>(Arrays.asList(ob));//这样就                                                           是得到一个新的list,可对其进行add,remove了
  2. copyArrays.add(222);//正常,不会报错
  3. Collections.addAll(new ArrayList<Integer>(5), ob);//或者新建一个空的list,把要转换的                                                                   数组用Collections.addAll添加进去

如果你想直接根据基本类型的数组如int[],long[]直接用asList转成list,那么我们可以选择用apache commons-lang工具包里的数组工具类ArrayUtils类的toObject()方法,非常方便,如下:

  1. Arrays.asList(ArrayUtils.toObject(i));//上边的代码:int i[]={11,22,33};,达到了我们想要的效果

这个类功能很强大:

还能“逆向”转过来,具体就不说了。

Array.asList:数组转list时你一定要知道的“陷阱”!的更多相关文章

  1. Array.asList:数组转list

    String s[]={"aa","bb","cc"}; List<String> sList=Arrays.asList(s) ...

  2. 【转载】最近在用Arrays的asList()生成的List时,List元素的个数时而不正确,数组转化为List,即Arrays.asList(intArray);

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1 char arrc = { ...

  3. Arrays.asList(数组) 解说

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 一:Arrays.asList(数组)该方法是将数组转化为集合(该方法主要用于Object对象数组 ...

  4. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  5. Python:list 和 array的对比以及转换时的注意事项

    Python:list 和 array的对比以及转换时的注意事项 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-4 ...

  6. [leetcode]26. Remove Duplicates from Sorted Array有序数组去重(单个元素只出现一次)

    Given a sorted array nums, remove the duplicates in-place such that each element appear only once an ...

  7. Java数组超出范围时如何处理多个异常?

    在Java编程中,数组超出范围时如何处理多个异常? 此示例显示如何使用System类的System.err.println()方法处理多个异常方法. package com.yiibai; publi ...

  8. 把Java数组转换为List时的注意事项

    本文由 ImportNew - 飘扬叶 翻译自 mlangc.欢迎加入翻译小组.转载请见文末要求. 不幸的是并不是每件事都尽如人意.举个例子,现在将一个Java数组转换为List.当然,我们可以使用A ...

  9. golang之 Array(数组)

    目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...

随机推荐

  1. Java学习----构造方法的重载

    一个类中有多个同名的参数不一样(参数的个数,参数的类型,参数的顺序)的构造方法 public class Student { public Student() { System.out.println ...

  2. sql编程 1

    declare emp_count number;begin select count(*) into emp_count from emp where HIOREDATE >= TO_DATE ...

  3. 关于ligerui和其他前端脚本的学习方法(适用于自己)

    特别是看别人的源代码(来源于自己看的那个cms系统),比如ligerui,别人用的juery和ligerui结合的很灵活,比如下面一段代码 var itemiframe = "#framec ...

  4. webBrowser(网络转载)

    C#WebBrowser控件使用教程与技巧收集--苏飞收集 先来看看常用的方法 [C#] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 ...

  5. Destoon QQ互联一键登录审核不通过的解决方案

    在QQ互联上申请帐号之后提交了审核, 后台填写APPID和KEY之后自己申请的QQ号可以正常登录,但QQ互联审核的时候一直审核不通过说是“您的网站审核未通过,原因是“点击QQ登录按钮提示登录失败或出现 ...

  6. jquery 事件绑定(1)

    $(function(){ $("#panel h5.head").bind("click",function(){ $(this).next().show() ...

  7. UPdate 延时盲注之小技巧

    Title:UPdate 延时盲注之小技巧  --2014-06-05 15:21 UPDATE TABLEZZZ SET zz=111111 where id=$id 当TABLEZZZ表为空的时候 ...

  8. oracle中的日期加减法

    --加法 ) from dual; --加1年 ) from dual; --加1月 ,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 ,'yyyy-mm-dd ...

  9. Keil_uvision_4基本使用教程

    Keil C51 V9.00 即09年发布的最新版本uVision 4,版本外观改变比较大,可以使用以前的注册文件.如果全新安装,在VISTA或者WIN 7系统下,请使用管理员方式运行,然后注册即可无 ...

  10. 从MVC框架看MVC架构的设计(转)

    尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些 ...