zoukankan      html  css  js  c++  java
  • java中的数组与集合相互转换

    1.数组转换成集合

    数组转换为集合,用Arrays.asList方法。

    public static void main(String[] args) {
            String[] arr = {"a","b","c","d","e"};
            List<String> list =  Arrays.asList(arr);
            System.out.println(list);   // List的toString方法
        }
    
    // 输出结果:
    [a, b, c, d, e]

    如果给转换过来的集合添加一个元素呢?

    public static void main(String[] args) {
            String[] arr = {"a","b","c","d","e"};
            List<String> list =  Arrays.asList(arr);
            list.add("f");
            System.out.println(list);
        }
    
    // 输出结果:
    Exception in thread "main" java.lang.UnsupportedOperationException

    报错了~

    其实,由数组转换过来的集合,并不能添加或删除元素,但是可以用集合的其他方法,因为集合比数组的方法丰富很多。

    再试一个基本数据类型的数组:

    public static void main(String[] args) {
            int[] arr = {1,2,3,4,5};
            List list = Arrays.asList(arr);
            System.out.println(list);
        }
    
    //输出结果:
    [[I@74a14482]

    奇怪了,怎么不是[1,2,3,4,5]?而是内存地址?

    原因是因为,基本数据类型的数组转换为集合时,会将整个数组当作一个对象来转换的!

    如果加上泛型就很容易知道错误了。

    List<int> list = Arrays.asList(arr);   // 编译的时候就报错了。
    List<int[]> list = Arrays.asList(arr);   // 这样就没有报错,可以知道集合里面的是数组对象,数组没有重写toString方法,自然的,打印数组对象就出现了内存地址了。

    如果非要把基本数据类型的数组转换为集合,而且打印符合我们的预期呢?

    public static void main(String[] args) {
            Integer[] arr = {1,2,3,4,5};
            List<Integer> list = Arrays.asList(arr);
            System.out.println(list);
        }

    2.集合转换成数组

    集合转换成数组用Collection接口的toArray方法。

    <T> T[]    toArray(T[] a)    返回包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型

    public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            /*当集合转换数组时,数组长度如果小于等于集合的size时,转换后的数组长度等于集合的size。
            如果数组的长度大于size,分配的数组长度就和指定长度一样,多余的是null
             */
            String[] arr = list.toArray(new String[0]);
            for (String s:arr) {
                System.out.println(s);
            }
        }
  • 相关阅读:
    【每天学习一点点】Tensorflow 版本与CUDA版本
    【每天学习一点点】使用plot_model绘制网络模式失败
    【每天学习一点点】keras cifar10.load_data()自己下载数据
    【每天学习一点点】Tensorflow2.X 运行问题:Could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
    【每天学习一点点】mxnet 版本运行失败问题
    【每天学习一点点】Tensorflow GPU与CPU版本
    【每天学习一点点】不再显示I信息(Tensorflow GPU)
    C# Dynamic特性
    豆瓣,你的前端开发有点幽默了
    配置SHH集群
  • 原文地址:https://www.cnblogs.com/chichung/p/10250824.html
Copyright © 2011-2022 走看看