zoukankan      html  css  js  c++  java
  • Java> List与数组之间相互转换

    List一般包含两种存储结构:顺序存储ArrayList和链式存储LinkedList。

    List与数组之间如何相互转行呢?

    数组转List

    1. 利用遍历数组每个元素,将元素一个个加入List
    最通用的方法,适合任意基本元素类型和语言。
    示例:

    List<Integer> list = new ArrayList<>();
    int[] a = new int[]{3,8,20,7,11,25};
    
    for (Integer d: a) {
          list.add(d);
    }
    
    list.foreach(System.out::println);
    

    2. 利用数组工具类Arrays的内置方法asList
    注意Arrays.asList(array)是Arrays的一个内部类Arrays.ArrayList的方法,并非我们熟知的java.util.List或java.util.ArrayList,而且返回的是一个List的视图,只能用于读取数据,不能修改或删除数据。
    如果需要修改,需要在此基础上新建一个通用的List。

    /*
     * 对象数组转化为List
     */
    Integer[] a = new Integer[]{3,8,20,7,11,25};
    List<Integer> list = new ArrayList<Integer>(Arrays.asList(a));
    
    /* 
     * 基本类型数组先用流对每个元素装箱, 转化为对应包装类型数组
     * 再通过Arrays.asList转化为列表视图
     * 通过新建List的构造器, 新建列表List
     */
    int[] b = new int[]{3,8,20,7,11,25};
    Integer[] boxB = Arrays.stream(b).boxed().toArray(Integer[]::new);
    List<Integer> list = new ArrayList<Integer>(Arrays.asList(boxB));
    

    3. 利用集工具类Collections.addAll方法
    直接利用Collections的add方法,将数组所有元素加入list中。要求数组必须是对象类型数组,不能是基本类型数组。如果是基本类型数组,需要先转换成对象类型数组。
    这种方法本质上,跟方法1相同,都是遍历数组元素,然后加入list。

    Integer[] a = new Integer[]{3,8,20,7,11,25};
    List<Integer> list = new ArrayList<>();
    Collections.addAll(list, a);
    

    List转数组

    1. 遍历List元素,将元素填入数组

    List<Integer> list = new ArrayList<>();
    Collections.addAll(new Integer[]{1,2,3,4,5});
    
    int[] a = new int[list.size()];
    int i = 0;
    for (Integer d: list) {
          a[i] = d;
          i ++
    }
    
    for (int i = 0; i < a.length; i ++) {
          System.out.println(a[i]);
    }
    

    2. 利用List的toArray方法
    利用List的toArray方法,将当前list转化为Object数组,再讲Object数组转化为对应类型数组,比如Object[] -> Integer[] -> int[]

    // 构建列表list, 并插入数据用于测试
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < 5; i++){
          list.add(i);
    }
    
    // List转Object[]
    Object[] objs = list.toArray();
    // Object[] 转Integer[]
    Integer[] nums = Arrays.stream(objs).toArray(Integer::new);
    // Integer[] 转int[]
    int[] arr = Arrays.stream(nums).mapToInt(Integer::valueOf).toArray();
    

    3. 利用List流的mapToInt方法

    // 构建列表list, 并插入数据用于测试
    List<Integer> list = new ArrayList<>();
    for (int i = 0; i < 5; i++){
          list.add(i);
    }
    
    int[] arr = list.stream().mapToInt(Integer::intValue).toArray;
    // 也可以用下面的语句
    int[] arr = list.stream().mapToInt(Integer::valueOf).toArray;
    
  • 相关阅读:
    PTA 程序设计题(数据结构第一章)
    (考研)计算机组成原理之计算机系统概论
    C语言复习
    vs2019 scanf 解决 C4996问题
    数据结构之链表
    数据结构之表、栈、队列
    数据结构之算法分析
    数据结构泛型之初接触
    数据结构之递归
    学习参考
  • 原文地址:https://www.cnblogs.com/fortunely/p/14121276.html
Copyright © 2011-2022 走看看