数组转集合方法的分析

在遇到一些奇奇怪怪的问题时,我总会上网查东西,经常查到大家的博客里,通过大家的帮助最后解决掉,所以我也打算将一些自己遇到并解决的问题,学到的新知识记录下来,记录自己的成长,同时也跟大家分享。

前两天遇到需要将数组转化成集合,在页面上使用freemaker的<#list>遍历的情况。当时使用Arrays.asList(),方法来转换,在页面显示的时候freemaker报出异常。
这里写图片描述

显然传到页面的集合中的元素不是int型,而是数组类型,然后我就用for each()解决了这个问题,今天又研究了一下这个问题,有所收获,便记录下来。

数组转集合有三种方法:

  1. Arrays.asList().
  2. Collections.addAll().
  3. for each().

我们分别来分析这三种方法:
1.Arrays.asList().

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * author T
 * 2016/12/4
 */
public class ArrayToList {

    public static void main(String[] args){
        String[] strArr = {"1","2","3","4"};
        List intList = Arrays.asList(strArr);
        System.out.println(intList);
    }
}

得到了我们预计的结果,集合中有四个元素,输出 [1, 2, 3, 4]。

接着我们使用之前出错的int型数组,观察输出结果。

输出结果是: [[I@5a1cfb56]
显然这是一个地址,因为intList中只有一个元素,这个元素是一个int类型的数组,所以输出了他引用的地址。

查看一下源码

   public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

 private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            if (array==null)
                throw new NullPointerException();
            a = array;
        }

asList()方法的参数是一个泛型参数,所以他只能是引用类型(如果我们传入基本类型数据,它会自动变成对应的包装类型),int型是基本类型,int型数组是引用类型,所以这里传入的实参a是intArr这个数组,而不是1,2,3,4 这几个整数,所以返回的集合中的元素就是intArr这个数组。

想要返回[1, 2, 3, 4],我们要使用基本类型对应的包装类型

        Integer[] intArr = {1,2,3,4};
        List intList = Arrays.asList(intArr);
        System.out.println(intList);

这样返回的就是我们想要的结果。

2.Collections.addAll().
这个方法跟Arrays.asList()方法分析起来一样,不再详述。

3.for each()
什么是for each。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值