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. 使用celery之了解celery(转)

    原文  http://www.dongwm.com/archives/shi-yong-celeryzhi-liao-jie-celery/   前言 我想很多做开发和运维的都会涉及一件事:cront ...

  2. iptables综述

    1 概述 如下图所示,iptables共有Filter,Nat,Mangle和RAW共四个table,每个table还有若干个chain,每个chain中还包含若干个rule 1.1 Filter t ...

  3. Flask系列(五)Flask实现分页

    一.flask分页组件 from urllib.parse import urlencode,quote,unquote class Pagination(object): ""& ...

  4. spark2.1.1创建Pipeline

    Pipeline 为流程,是Spark创建机器学习的一个流程控制的类 下面直接贴出创建的代码,以及整个流程 第一种: import org.apache.spark.ml.{Pipeline, Pip ...

  5. 分布式版本管理git学习资料整理推荐

    一.什么是git? Git is a free and open source distributed version control system designed to handle everyt ...

  6. soapUI-DataSource Loop

    1.1.1  DataSource Loop 当我们需要遍历某DataSource中的所有内容时.需要在TestCase中添加DataSource Loop步骤,然后双击它进行配置,如下图所示: Op ...

  7. Virtualbox中win7虚拟机中U盘不可用问题的解决

    Virtualbox版本是5.0.0,主机运行多是Ubuntu12.04 LTS,虚拟机是Win7 X64.起初Win7正常运行,Virtualbox的增强功能已安装.下面是如何一步一步解决U盘不可用 ...

  8. linux系统进入单用户模式

    进入单用户模式可进行root账户和其他普通账户的密码的修改 1)Ubuntu 开机到grub时(在开机时长按shift键),用上下键移到第二行的恢复模式(recovery mode),按e(注意不是回 ...

  9. shoes的安装前后(一)

    最近看到一个模型用到了shoes,准备自己试一试.搞了半天,也安装不成功.直接安装包,gem install shoes,失败, 从rubygems上下载最新版本的shoes 然后安装,成功了.随便写 ...

  10. 2018-2019 ICPC, NEERC, Northern Eurasia Finals (Unrated, Online Mirror, ICPC Rules, Teams Preferred) Solution

    A. Alice the Fan Solved. 题意: 两个人打网球,要求teamA 的得分与其他队伍拉开尽量大 输出合法的方案 思路: $dp[i][j][k][l] 表示 A 赢i局,其他队伍赢 ...