Java 集合数组列表的转换小结 asList VS toArray

举报
zhushy 发表于 2021/11/18 15:51:04 2021/11/18
【摘要】 Java 集合数组列表的转换小结 集合转换为数组toArrayimport java.util.ArrayList;import java.util.Collection;public class ToArrayDemo { public static void main(String[] args) { Collection<String> list = new Ar...

Java 集合数组列表的转换小结

集合转换为数组toArray

import java.util.ArrayList;
import java.util.Collection;

public class ToArrayDemo {
    public static void main(String[] args) {
        Collection<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");

        // 集合转换为数组
        // Collection中定义了两个方法:
        // Object[] toArray()
        // <T>Y[] toArray(T[] array)

        Object[] obj = list.toArray();
        for (Object str : obj) {
            System.out.println(str);
        }
        System.out.println("------------------------------");

        // 传入的数组长度的区别:若给定的数组长度不足以保存集合中所有的元素时,集合子集创建一个同类型数组,长度和集合长度一致
        // 若给定的数组长度大于集合的长度,则使用我们给定的数组。多余的部分数据元素为空

        String[] array = list.toArray(new String[5]);

        for (String str : array) {
            System.out.println(str);
        }
        System.out.println("------------------------------");

        /*
         * 返回的数组长度等于列表的长度
         */
        String[] array2 = list.toArray(new String[0]);

        for (String str : array2) {
            System.out.println(str);
        }
        System.out.println("------------------------------");

        /*
         * 返回的数组长度等于列表的长度
         */
        String[] array3 = list.toArray(new String[1]);

        for (String str : array3) {
            System.out.println(str);
        }

    }
}

输出如下:

one
two
three
four
------------------------------
one
two
three
four
null
------------------------------
one
two
three
four
------------------------------
one
two
three
four

数组转换为列表asList

import java.util.Arrays;

public class AsListDemo {
    public static void main(String[] args) {
        String s[] = { "aa", "bb", "cc" };
        ArrayList<String> sList = Arrays.asList(s);
        for (String str : sList) {// 能遍历出各个元素
            System.out.println(str);
        }
        System.out.println(sList.size()); // 为3

        System.out.println("- - - - - - - - - - -");

        int i[] = { 11, 22, 33 };
        List intList = Arrays.asList(i); // intList中就有一个Integer数组类型的对象,整个数组作为一个元素存进去的
        for (Object o : intList) { // 就一个元素
            System.out.println(o.toString());
        }

        System.out.println("- - - - - - - - - - -");

        Integer ob[] = { 11, 22, 33 };
        List<Integer> objList = Arrays.asList(ob); // 数组里的每一个元素都是作为list中的一个元素
        for (int a : objList) {
            System.out.println(a);
        }

        System.out.println("- - - - - - - - - - -");
    }
}

输出如下:

aa
bb
cc
3
- - - - - - - - - - -
[I@79698539
- - - - - - - - - - -
11
22
33
- - - - - - - - - - -

看来,基本类型的数组无法直接使用asList转换为List。如果你想直接根据基本类型的数组如int[],long[]直接用asList转成list,那么我们可以选择用apache commons-lang工具包里的数组工具类ArrayUtils类的toObject()方法。

原因是什么呢?

Arrays.asList()函数接收的参数原型其实是泛型变长参数来的,而基本类型是不能作为范型的参数,按道理应该使用包装类型,但这里缺没有报错,因为数组是可以泛型化的,所以转换后在list中就有一个类型为int的数组。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。