1. 最近在用ArraysasList()生成的List时,List元素的个数时而不正确。
  2.  
  3. Java代码
  4.  
  5. //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1
  6. char arrc = {'a','b'};
  7. int arrint = {1,2,4};
  8. Arrays.asList(arrc).size() ;// 结果为1;
  9. Arrays.asList(arrint ).size() ;//结果为1;
  10.  
  11. //传递对象数组,元素个数正确。
  12. String arrstr = {"a","b","java","spring","hadoop","lucene"};
  13. Arrays.asList(arrstr ).size() ;//结果为6;
  14. 跟源码:
  15.  
  16. Java代码
  17.  
  18. public static <T> List<T> asList(T... a) {
  19. return new ArrayList<T>(a);
  20. }
  21. 继续跟,Arrays的私有内部类ArrayList (没搞明白,为什么这里也起名为ArrayList
  22.  
  23. private final E[] a;
  24.  
  25. ArrayList(E[] array) {
  26. if (array==null)
  27. throw new NullPointerException();
  28. a = array;
  29. }
  30.  
  31. public int size() {
  32. return a.length;
  33. }
  34. 发现问题出在java5 的可变参数上。于是写了demo,测试。
  35.  
  36. public class TestArray {
  37. PrintStream out = System.out;
  38. @Test
  39. public void array() {
  40. char[] arrc = {'a','b','c','d','e'};
  41. out.println("传递char数组:");
  42. print(arrc);
  43. out.println("直接传递:");
  44. print('a','b','c','d','e');
  45. out.println("----------------------------");
  46.  
  47. int[] arri = {1,2,3,4,5,6,7};
  48. out.println("传递int数组:");
  49. print(arri);
  50. out.println("直接传递:");
  51. print(1,2,3,4,5,6,7);
  52. out.println("----------------------------");
  53.  
  54. Integer[] arrInt = {1,2,3,4,5,6,7};
  55. out.println("传递Integer数组:");
  56. print(arrInt);
  57. out.println("直接传递:");
  58. print(1,2,3,4,5,6,7);
  59. out.println("----------------------------");
  60.  
  61. String[] arrs = {"a","b","c","d","e"};
  62. out.println("传递String数组:");
  63. print(arrs);
  64. out.println("直接传递:");
  65. print('a','b','c','d','e');
  66. out.println("----------------------------");
  67. }
  68.  
  69. public void print(Object...arr){
  70. out.print("内容:"+Arrays.toString(arr));
  71. out.println("\t\t数组长度:"+arr.length+" ");
  72. }
  73. }
  74. 输出结果为:
  75.  
  76. 传递char数组:
  77. 内容:[[C@defa1a] 数组长度:1
  78. 直接传递:
  79. 内容:[a, b, c, d, e] 数组长度:5
  80. ----------------------------
  81. 传递int数组:
  82. 内容:[[I@f5da06] 数组长度:1
  83. 直接传递:
  84. 内容:[1, 2, 3, 4, 5, 6, 7] 数组长度:7
  85. ----------------------------
  86. 传递Integer数组:
  87. 内容:[1, 2, 3, 4, 5, 6, 7] 数组长度:7
  88. 直接传递:
  89. 内容:[1, 2, 3, 4, 5, 6, 7] 数组长度:7
  90. ----------------------------
  91. 传递String数组:
  92. 内容:[a, b, c, d, e] 数组长度:5
  93. 直接传递:
  94. 内容:[a, b, c, d, e] 数组长度:5
  95. ----------------------------
  96. java 5 可变参数,直接传递值与传递数组处理的机制不太相同。
  97.  
  98. 如果直接传递数组,基本类型数组将被视为一个对象而不会被解析成数组,如果直接传递参数将能正常解析。因此传递基本类型数组时强烈建议转为其封装类对象的数组 int ->Integer ,long->Long …………。(未对其封装)
  99.  
  100. 这样写就很清楚了吧
  101. public static void main(String[] args) {
  102. int[] intArray = {1,2,3};
  103. List<int[]> myList = Arrays.asList(intArray);
  104. System.out.println(myList.size());
  105. System.out.println(myList.get(0).length);
  106.  
  107. }
  108.  
  109. 大概明白了:定义:
  110.  
  111. public static <T> List<T> asList(T... a) {
  112. return new ArrayList<T>(a);
  113. }

  114. 数组转化为List
  1. int[] intArray = {1,2,3};
  2. 104 List<int[]> myList = Arrays.asList(intArray);
  1. 这个T必须是对象类型。好比我们不能new ArrayList<int> 只能new ArrayList<Integer>

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

  1. Java 数组基础,java.util.Arrays

    定义数组 方式1(推荐,更能表明数组类型) 方式2(同C语言) 方式3定义时直接初始化 数组运用基础 数组长度 equals() 数组元素不为基本数据类型时 二维数组 二维数组基础 变长的二维数组 j ...

  2. Ansj分词双数组Trie树实现与arrays.dic词典格式

    http://www.hankcs.com/nlp/ansj-word-pairs-array-tire-tree-achieved-with-arrays-dic-dictionary-format ...

  3. java:数组操作工具类 java.util.Arrays包 主要方法详解

    Arrays类位于Java.util包下,是一个对数组操作的工具类,现将Arrays类中的方法做一个总结(JDK版本:1.6.0_34).Arrays类中的方法可以分为八类: sort(对数组排序) ...

  4. PowerDesigner PDM生成sql脚本时:表的名称和表里面的字段名称都有引号解决。。。

    PowerDesigner PDM生成sql脚本时:表的名称和表里面的字段名称都有引号解决... 1.当你的PowerDesigner 是新安装时,你得设置可能就会出现一些问题,在这里比如:PDM生成 ...

  5. chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]

    chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...

  6. PHP“Cannot use object of type stdClass as array” (php在调用json_decode从字符串对象生成json对象时的报错)

    php再调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据,会得到下面的错误 错误:Cannot use object of type stdClass as arra ...

  7. visual 2008中error PRJ0003 : 生成 cmd.exe 时出错

    visual 2008中error PRJ0003 : 生成 cmd.exe 时出错”,   和vs2008 sp1没关系 解决方案:工具—>选项—>项目和解决方案—>VC++目录, ...

  8. 【JAVA】使用Eclipse依赖生成jar包时,避免最外层同时生成资源文件的配置。

    使用Eclipse依赖生成jar包时,如果做配置,生成的jar包文件会全部生成在外面,这并不是我们需要的,下面我们一起来修改下配置,使生成的jar包符合我们的需求吧. 1.如果不做任何配置生成的jar ...

  9. 数组升序排序的方法Arrays.sort();的应用

    package com.Summer_0421.cn; import java.util.Arrays; /** * @author Summer * 数组升序排序的方法Arrays.sort();应 ...

随机推荐

  1. C++设计模式——策略模式

    策略模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对策略模式是这样说的:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换.该模式使得算法可独立于使用它的客户而变化 ...

  2. C++11 并发指南------std::thread 详解

    参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Int ...

  3. leetcode@ [289] Game of Life (Array)

    https://leetcode.com/problems/game-of-life/ According to the Wikipedia's article: "The Game of ...

  4. 查看Linux系统之终端登录的方式(last命令)

    更多,请看他人博客:last 命令 http://www.cnblogs.com/kerrycode/p/4223751.html http://www.xitongzhijia.net/xtjc/2 ...

  5. python 偏函数

    functools.partial可以设置默认参数和关键字参数的默认值 Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的 ...

  6. js调试工具Console命令详解

    这篇文章主要介绍了js调试工具Console命令详解,需要的朋友可以参考下   一.显示信息的命令 复制代码 代码如下: < !DOCTYPE html> < html> &l ...

  7. other

    1.http://handlebarsjs.com/ 2.grunt

  8. .编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。

    package com.homework.zw; //类Print部分 public class Print1 { int x; void output() { if(x==1) { for(int ...

  9. Cocos2d-x——CocosBuilder官方帮助文档翻译1 使用自定义类

    原创:请注明转载! 在Cocos2d-x中使用CocosBuilder 使用自定义类 CocosBuilder的使用方法是通过自定义类.在CocosBuilder中选中一个对象并在属性栏中输入自定义类 ...

  10. [C语言(VC)] 打造自己的键盘记录器 (zaroty)

    说起键盘记录,想必很多朋友都用过网上流传的一些键盘记录软件吧,但是有没有想过自己写一个呢?也许你会想:会不会很复杂啊?我可以很负责的告诉你,写键盘记录是很简单的.你所需要的仅仅是懂得一些C语言的DLL ...