Java - 数组和集合的相互转化

一、数组转集合

  注意:数组只能转化为List集合,因为Set不能存放重复元素,若转化为Set,可能出现元素丢失的情况

  1. 方法一:遍历数组,将数组元素添加到List集合中
    1 Integer[] array = {1,2,3,4,5};
    2 List<Integer> list =new ArrayList<>();
    3 for (int i=0;i<array.length;i++){
    4      list.add(i,array[i]);
    5 }

    也可以使用foreach循环

    1 Integer[] array = {1,2,3,4,5};
    2 List<Integer> list =new ArrayList<>();
    3 for (Integer element:array) {
    4     list.add(element);
    5 }
  2. 方法二:使用数组工具类的asList()方法
    Integer[] array = {1,2,3,4,5};
    List<Integer> list =Arrays.asList(array);

    注意:

    • 该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)
    • 此种方法转化而来的List集合不支持add和remove方法,会报错,
      • 原因是:这个新集合是由数组转换过来的,那么该集合就表示原来的数组,所以对集合的操作就是对数组的操作。那么添加元素会导致原数组扩容,那么就不能表示原来的数组了。所以不允许向该集合添加新元素了
    • 若对List集合做更新操作,原数组元素也会随之改变,即该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新
    • 解决办法:
      • ①:创建一个空集合,将数组转化后的集合用addall()方法全部添加到这个空集合中
         Integer[] array = {1,2,3,4,5};
         List<Integer> list =Arrays.asList(array);
         List<Integer> list_new = new ArrayList<>();
         list_new.addAll(list);
         list_new.set(0,500);
         System.out.println(list_new.get (0));
         System.out.println(array[0]);
      • ②:推荐写法
         Integer[] array = {1,2,3,4,5};
         List<Integer> list =Arrays.asList(array);
         List<Integer> list_new = new ArrayList<>(list);  
  3. 方法三:使用Collections.addall()方法
    Integer[] array = {1,2,3,4,5};
    List<Integer> list_new =new ArrayList<>();
    Collections.addAll(list_new,array);
  4. 方法四:使用java9的新方法List.of()
    # 此方法为 Java9新增方法,定义在List接口内,并且为静态方法,故可以由类名直接调用
    List<String> resultList = List.of(array);

     

二、集合转数组

  1. 方法一:遍历
  2. 方法二:使用集合的toArray()方法
       List<Integer> list =new ArrayList<>();
       list.add(3);
       list.add(4);
       list.add(5);
       list.add(2);
    
       Integer[] array = new Integer[list.size()];
       list.toArray(array);
       System.out.println(Arrays.toString(array));

     

posted @ 2020-03-11 17:03  爱穿新衣服的姑凉  阅读(1586)  评论(0编辑  收藏  举报