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);
            }
        }
  • 相关阅读:
    Lucene in action 笔记 case study
    关于Restful Web Service的一些理解
    Lucene in action 笔记 analysis篇
    Lucene in action 笔记 index篇
    Lucene in action 笔记 term vector
    Lucene in action 笔记 search篇
    博客园开博记录
    数论(算法概述)
    DIV, IFRAME, Select, Span标签入门
    记一个较困难的SharePoint性能问题的分析和解决
  • 原文地址:https://www.cnblogs.com/chichung/p/10250824.html
Copyright © 2011-2022 走看看