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

    ---------------转载

    数组和List、Set都可以存放多个元素,数组的特点是长度固定,访问速度非常快,元素类型单一;List的特点是长度可以动态增加,能够维护元素的次序,存入的所有元素都当做Object,允许元素重复;Set的特点是长度可以动态增加,能够保证元素不重复,存入的所有元素都当做Object。本节实例介绍Set、List和数组之间如何转换,将Set、List对象中的元素转换为数组,将数组转换为Set、List对象,转换过程中元素保持不变。

    关键技术剖析:

    实现List、Set和数组之间转换的关键技术点如下:

    ²  List转换成数组可以使用List的toArray方法,返回一个Object数组。

    ²  Set转换成数组可以使用Set的toArray方法,返回一个Object数组。

    ²  如果List或Set中元素的类型都为A,那么可以使用带参数的toArray方法,得到类型为A的数组,具体语句是“(A[])set.toArray(new A[0])”。

    ²  数组转换成List可以使用Arrays的asList静态方法,得到一个List。

    ²  数组转化成Set时,需要先将数组转化成List再用List构造Set。

     

    import java.util.ArrayList;

    import java.util.Arrays;

    import java.util.HashSet;

    import java.util.List;

    import java.util.Set;

     

    public class TestCollectionToArray {

     

       public static void main(String[] args) {

          List list = new ArrayList();

          list.add("a");

          list.add("b");

          list.add("c");

          list.add("d");

          // list.add(1);//会产生java.lang.ArrayStoreException异常

          // 当list中的数据类型都一致时可以将list转化为数组

          Object[] array = list.toArray();

          System.out.println("从list转换成的对象数组长度为:+ array.length);

          // 在转化为其它类型的数组时需要强制类型转换,并且,要使用带参数的toArray方法,参数为对象数组,

          // 将list中的内容放入参数数组中,当参数数组的长度小于list的元素个数时,会自动扩充数组的长度以适应list的长度

          String[] array1 = (String[]) list.toArray(new String[0]);

          System.out.println("从list转换成的字符串数组长度为:+ array1.length);

          // 分配一个长度与list的长度相等的字符串数组

          String[] array2 = (String[]) list.toArray(new String[list.size()]);

          System.out.println("从list转换成的字符串数组长度为:+ array2.length);

          list.clear();

     

          // 将数组转换成list

          for (int i = 0; i < array.length; i++) {

             list.add(array[i]);

          }

          System.out.println("将数组转换成list的元素个数为:+ list.size());

          list.clear();

          // 直接使用Arrays的asList方法

          list = Arrays.asList(array);

          System.out.println("将数组转换成list的元素个数为:+ list.size());

     

          Set set = new HashSet();

          set.add("a");

          set.add("b");

          // 将set转换为数组

          array = set.toArray();

          array1 = (String[]) set.toArray(new String[0]);

          array2 = (String[]) set.toArray(new String[set.size()]);

          System.out.println("从Set转换成的对象数组长度为:+ array.length);

          System.out.println("从Set转换成的字符串数组长度为:+ array2.length);

          // 数组转换成Set

          // 将数组转换成List后,再用List构造Set

          set = new HashSet(Arrays.asList(array));

          System.out.println("将数组转换成Set的元素个数为:+ list.size());

          // 将Set清空,然后把数组转换成的list全部add

          set.clear();

          set.addAll(Arrays.asList(array1));

          System.out.println("将数组转换成Set的元素个数为:+ list.size());

       }

    }

    输出结果为:

    list转换成的对象数组长度为:4

    list转换成的字符串数组长度为:4

    list转换成的字符串数组长度为:4

    将数组转换成list的元素个数为:4

    将数组转换成list的元素个数为:4

    Set转换成的对象数组长度为:2

    Set转换成的字符串数组长度为:2

    将数组转换成Set的元素个数为:4

    将数组转换成Set的元素个数为:4

    源码分析:

  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/joycelishanhe/p/3907611.html
Copyright © 2011-2022 走看看