最近在用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. 在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)

    在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持) 发布时间: 2015-02-27 00:16 1.spice的USB重定向 1.1 介绍 使用usb重定向,在clie ...

  2. RegExp.exec

    来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec Summ ...

  3. CSS边框与边界

    (上右下左依次体现)à边框的同一属性名称可以同时使用多个属性值 简化方案:border: 长度 形态 颜色 例如 border:1px solid black; 16.2 CSS中边界的使用 padd ...

  4. Weblogic常见故障一:JDBC Connection Pools

    最近系统老是出现数据库连接池不够用的问题,由于weblogic数据源里没有配置JDBC连接数,取的是默认值15,太小导致connection耗尽,是不是就报一堆错.后来通过修改WebLogic数据源配 ...

  5. 爬去知乎百万用户信息之UserTask

    UserTask是获取用户信息的爬虫模块 public class UserManage { private string html; private string url_token; } 构造函数 ...

  6. 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算

    尺寸计算: Starling中的尺寸是以像素为单位的,这一切都得力于我们使用的正交矩阵,还记得我们顶点数据中的位置数据么,如果我们提交的矩形的四个顶点为(0, 0)(0, 100)(100, 0)(1 ...

  7. 使用hexdump 查看二进制文件

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

  8. uva 11246 - K-Multiple Free set(数论)

    题目链接:uva 11246 - K-Multiple Free set 题目大意:给定n,k.求一个元素不大于n的子集,要求该子集的元素尽量多,而且不含两个数满足a∗k=b. 解题思路:容斥原理.f ...

  9. 从零开始学android开发-字符如何转换整形 string 转化为int

    int i = Integer.parseInt(string);

  10. go strings 常用的几个函数

    fmt.Println(strings.ToUpper("hello world")) //转换为大写    fmt.Println(strings.ToLower("H ...