zoukankan      html  css  js  c++  java
  • java集合与数组之间转换

    数组转换为集合

    采用java中集合自带的asList()方法就可以完成转换了

    String[] array = new String[] {"zhu", "wen", "tao"};
    // String数组转List集合
    List<String> mlist = Arrays.asList(array);
    // 输出List集合
    for (int i = 0; i < mlist.size(); i++) {
        System.out.println("mlist-->" + mlist.get(i));
    }
    

    特别注意:

    因为,Arrays.asList()方法转换成的List集合类是java.util.Arrays.ArrayList下面的,它是java.util.Arrays类中自己定义的一个内部类,没有实现具体的add()以及remove()方法,直接使用父类AbstractList的方法,但是父类中add()以及remove()方法是抛出UnsupportedOperationException()异常的。
    所以如果单纯转换成List集合是为了遍历,则通过Arrays.asList()方法转换之后就可以了,但是如果需要对List集合进行增删改操作的,则需要自己重新新建一个List集合,把数据转到新的集合中,进行后续操作

    解决方案:

    1、运用ArrayList的构造方法是目前来说最完美的作法,代码简洁,效率高:

      List<String> list = new ArrayList<String>(Arrays.asList(array));

    List<String> list = new ArrayList<String>(Arrays.asList(array));
    
    //ArrayList构造方法源码
    public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        size = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    }
    

    2、运用Collections的addAll方法也也是不错的解决办法

    List<String> list = new ArrayList<String>(array.length);
    Collections.addAll(list, array);
    

    List集合转换成数组

    采用集合的toArray()方法直接把List集合转换成数组,这里需要注意,不能这样写: 
    String[] array = (String[]) mlist.toArray(); 
    这样写的话,编译运行时会报类型无法转换java.lang.ClassCastException的错误,这是为何呢,这样写看起来没有问题啊 
    因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,所以将整个List强制转换是不行的 
    正确的写法应该是这样的 
    String[] array = mlist.toArray(new String[0]);
    
    
    List<String> mlist = new ArrayList<>();
    mlist.add("zhu");
    mlist.add("wen");
    mlist.add("tao");
    // List转成数组
    String[] array = mlist.toArray(new String[0]);
    // 输出数组
    for (int i = 0; i < array.length; i++) {
        System.out.println("array--> " + array[i]);
    }
    

    参考

    原文:https://blog.csdn.net/zhenwei1994/article/details/78783209

  • 相关阅读:
    C系统,操作符和词法元素
    值类型和引用类型
    WPF
    C#版本进化
    快速排序
    C语言字符串
    查找
    简单快速排序
    PHP运行出现Notice : Use of undefined constant 的解决办法
    vs2010 修改注释模板
  • 原文地址:https://www.cnblogs.com/eternityz/p/12238918.html
Copyright © 2011-2022 走看看