java里面的Arrays类有个asList方法,参数是1或多个Object对象,如果传入一个Object数组,则可以将该数组转化为List,但如果传入的是一个基本类型的数据(int,long,short 等),则无法将数组转换成正确的list,测试代码如下:

Main.java
1
2
3
4
5
6
7
    public static void main(String[] args) {
List<int[]> ints = asList(new int[]{1, 2});
System.out.println(ints.size()); //1 List<Integer> integers = asList(new Integer[]{1, 2});
System.out.println(integers.size()); //2
}

asList会将整个基本类型数组作为一个Object对象放到list里面,所以第一个List的size只有1。

如何将基本类型数组装换为一个list呢?最简单暴力的方法就是遍历整个基本类型数组,再逐一往list里面添加。但这种方法不适用所有基本类型,需要为每种基本类型写一个方法。

Main.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public List<Integer> arrayToList(int[] ints) {
List<Integer> intList = new ArrayList<Integer>();
for (int anInt : ints) {
intList.add(anInt);
}
return intList;
} public List<Long> arrayToList(Long[] longs) {
List<Long> longList = new ArrayList<Long>();
for (long anLong : longs) {
longList.add(anLong);
}
return longList;
}   .....other arrayToList method

重复代码会很多是吧,如何消除呢?下面就是帖子的重点了,利用Array类进行操作。

Array类有几个方法比较常用:

  • public static int getLength(java.lang.Object array):获取数组对象的长度。
  • public static java.lang.Object get(java.lang.Object array, int index):根据下标获取数组对象的元素。
  • public static void set(java.lang.Object array, int index, java.lang.Object value):根据下标插入数组对象元素。

于是上面那些方法就可以用一个方法搞定了,如下:

Main.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public static void main(String[] args) {
int[] ints = {1, 2};
long[] longs = {1L, 2L, 3L};
char[] chars = {'a', 'b', 'c', 'd'}; System.out.println(arrayToList(ints).size()); //2
System.out.println(arrayToList(longs).size()); //3
System.out.println(arrayToList(chars).size()); //4
} public static List<Object> arrayToList(Object array) {
List<Object> list = new ArrayList<Object>();
int length = Array.getLength(array);
for (int i = 0; i < length; i++) {
list.add(Array.get(array, i));
}
return list;
}

使用Array类处理基本数组对象的更多相关文章

  1. Array.prototype.sort()对数组对象排序的方法

    Array.prototype.sort()方法接受一个参数——Function,Function会提供两个参数,分别是两个进行比较的元素,如果元素是String类型则通过Unicode code进行 ...

  2. 如何在JavaScript中手动创建类数组对象

    前言 关于什么是js的类数组对象这里不再赘述.可以参考这个链接,还有这里. js中类数组对象很多,概念简单的讲就是看上去像数组,又不是数组,可以使用数字下标方式访问又没有数组方法. 例: argume ...

  3. .NET中string[]数组和List<string>泛型的相互转换以及Array类的Sort()方法(转)

    从string[]转List<string>: " }; List<string> list = new List<string>(str); 从List ...

  4. Array类的Sort()方法

    刚复习了Array类的sort()方法, 这里列举几个常用的,和大家一起分享. Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System. ...

  5. C#编程(三十三)----------Array类

    Array类 创建数组 Array intArray1 = Array.CreateInstance(typeof(int), 5); for (int i = 0; i < 5; i++) { ...

  6. C# Array类的Sort()方法

    Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System.Int32 和System.String实现了IComparable接口,所以下 ...

  7. C++Array类模板编写笔记

    C++Array类模板 函数模板和类模板都属于泛型技术,利用函数模板和类模板来创建一个具有通用功能的函数和类,以支持多种不同的形参,从而进一步简化重载函数的函数体设计. 声明方法:template&l ...

  8. 数组对象(NSArray和NSMutableArrray)

    Objective-C中除了可以使用C中的基本数组外,如int[5],char word[] ={‘a’,'b’,'c’};Foundation还提供了NSArray类.Foundation是有序的对 ...

  9. javascript中的字符串对象和数组对象

    1.javascript的对象的概念 在javascript中,除了null和undefined以处,其他的数据类型都被定义成了对象 也可以用创建对象的方法定义变量,string,math,array ...

随机推荐

  1. vsftpd文件服务器安装与配置

    -d<登入目录>:指定用户登入时的启始目录:. -s<shell>:指定用户登入后所使用的shell: /sbin/nologin指的是不允许login当前Linux系统.当用 ...

  2. LVS和nginx反向代理网站架构

    LVS和nginx反向代理网站架构 nginx反向代理和lvs的dr都存在单点,要keepalived做高可用,但是成本高了 f

  3. 关于sed -i 修改selinux 的软链接文件的问题

    关于sed -i 修改selinux 的软链接文件的问题 http://blog.csdn.net/kumu_linux/article/details/8598005 因为sed -i /etc/s ...

  4. 003-spring cache-JCache (JSR-107) annotations

    参看地址:https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-js ...

  5. Teigha.net读写dwg文件显示

    官网:http://www.opendesign.com/ http://www.cnblogs.com/zhanglibo0626/archive/2011/11/04/2236238.html 下 ...

  6. OpenStack功能简介

    为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 二 ...

  7. nmon 命令

    nmon 命令 用途 以交互方式显示本地系统统计信息并以记录方式记录系统统计信息. 语法 交互方式: nmon [ -h ] nmon [ -s < seconds >] [ -c < ...

  8. Office 2003 2007 2010 配置进度 正在配置 解决方案 (转载)

    在安装过Office2003.2007 或者2010之后,如果没有选择全部的组件,或者是因为安装到非系统盘,有时候打开 Office 文档的时候就会出现正在配置Office,或者Office配置进度的 ...

  9. hdu5012 圆环相交面积

    题中给了 两个同心圆, 一个大圆一个小圆,然后再给了一个大圆一个小圆也是同心圆,求这两个圆环相交的面积,用两个大圆面积减去两倍大小圆面积交加上两个小圆面积交,就ok了 这里算是坑明白了 使用acos的 ...

  10. Entity Framework 数据生成选项DatabaseGenerated(转)

    在EF中,我们建立数据模型的时候,可以给属性配置数据生成选项DatabaseGenerated,它后有三个枚举值:Identity.None和Computed. Identity:自增长 None:不 ...