最近在用Arrays的asList()生成的List时,List元素的个数时而不正确。

 Java代码

 //经多次测试,只要传递的基本类型的数组,生成List的元素个数均为1
char arrc = {'a','b'};
int arrint = {1,2,4};
Arrays.asList(arrc).size() ;// 结果为1;
Arrays.asList(arrint ).size() ;//结果为1; //传递对象数组,元素个数正确。
String arrstr = {"a","b","java","spring","hadoop","lucene"};
Arrays.asList(arrstr ).size() ;//结果为6;
跟源码: Java代码 public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
继续跟,Arrays的私有内部类ArrayList (没搞明白,为什么这里也起名为ArrayList) private final E[] a; ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
} public int size() {
return a.length;
}
发现问题出在java5 的可变参数上。于是写了demo,测试。 public class TestArray {
PrintStream out = System.out;
@Test
public void array() {
char[] arrc = {'a','b','c','d','e'};
out.println("传递char数组:");
print(arrc);
out.println("直接传递:");
print('a','b','c','d','e');
out.println("----------------------------"); int[] arri = {1,2,3,4,5,6,7};
out.println("传递int数组:");
print(arri);
out.println("直接传递:");
print(1,2,3,4,5,6,7);
out.println("----------------------------"); Integer[] arrInt = {1,2,3,4,5,6,7};
out.println("传递Integer数组:");
print(arrInt);
out.println("直接传递:");
print(1,2,3,4,5,6,7);
out.println("----------------------------"); String[] arrs = {"a","b","c","d","e"};
out.println("传递String数组:");
print(arrs);
out.println("直接传递:");
print('a','b','c','d','e');
out.println("----------------------------");
} public void print(Object...arr){
out.print("内容:"+Arrays.toString(arr));
out.println("\t\t数组长度:"+arr.length+" ");
}
}
输出结果为: 传递char数组:
内容:[[C@defa1a] 数组长度:1
直接传递:
内容:[a, b, c, d, e] 数组长度:5
----------------------------
传递int数组:
内容:[[I@f5da06] 数组长度:1
直接传递:
内容:[1, 2, 3, 4, 5, 6, 7] 数组长度:7
----------------------------
传递Integer数组:
内容:[1, 2, 3, 4, 5, 6, 7] 数组长度:7
直接传递:
内容:[1, 2, 3, 4, 5, 6, 7] 数组长度:7
----------------------------
传递String数组:
内容:[a, b, c, d, e] 数组长度:5
直接传递:
内容:[a, b, c, d, e] 数组长度:5
----------------------------
java 5 可变参数,直接传递值与传递数组处理的机制不太相同。 如果直接传递数组,基本类型数组将被视为一个对象而不会被解析成数组,如果直接传递参数将能正常解析。因此传递基本类型数组时强烈建议转为其封装类对象的数组 int ->Integer ,long->Long …………。(未对其封装)
这样写就很清楚了吧
public static void main(String[] args) {
int[] intArray = {1,2,3};
List<int[]> myList = Arrays.asList(intArray);
System.out.println(myList.size());
System.out.println(myList.get(0).length); } 大概明白了:定义: public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}

数组转化为List
int[] intArray = {1,2,3};
104 List<int[]> myList = Arrays.asList(intArray);
 这个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. java条件选择学习

    boolean类型用于声明布尔型变量,只能是true或false中的一个 boolean lightOn = true; 一个简单的数学学习工具: public class Main { public ...

  2. ZOJ-3593 One Person Game 概率DP

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3593 带环的概率DP一般的做法是求出转移方程,然后高斯消元解方程 ...

  3. 利用XSD配合XSLT產出特定格式Word檔案 -摘自网络

    利用類別產生XSD檔 產出XSD檔的目的在於提供Word樣板設計之資料框架 在此使用微軟提供之XML Schema Definition Tool (Xsd.exe)工具產生XSD檔 1. 定義類別 ...

  4. Delphi外挂开发网站

    http://cheatengine.org/http://wenku.baidu.com/view/2d5de818964bcf84b9d57b15.html   [delphi外G]http:// ...

  5. hdoj 2091 空心三角形

    空心三角形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. 74LS164 for stm32 源码下载

      在单片机系统中, 如果并行口的IO资源不够,而串行口又没有其他的作用, 那么我们可以用74LS164来扩展并行IO口,节约单片机资源.       74LS164是一个串行输入并行输出的移位寄存器 ...

  7. 超级MINI STLINK V2 官方固件自动升级 ST-Link 【worldsing 笔记】

    简介: 支持所有带SWIM接口的STM8系列单片机 支持所有带SWD接口的STM32系列单片机 完全兼容Keil,STVP,STVD,IAR,COSMIC,STM32 ST-LINK Utility! ...

  8. 在线性级别时间内找出无序序列中的第k个元素

    在一个无序序列中找出第k个元素,对于k很小或者很大时可以采取特殊的方法,比如用堆排序来实现 .但是对于与序列长度N成正比的k来说,就不是一件容易的事了,可能最容易想到的就是先将无序序列排序再遍历即可找 ...

  9. iOS 分类和继承

    iOS 中分类(Categories) 和 继承(Inherit)有相同的功能,但在一些细节上又有差异,简单介绍一下两者的异同. 分类可以在不知道系统类源代码的情况下,为这个类添加新的方法.分类只能用 ...

  10. linux tomcat自启动设置

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...