zoukankan      html  css  js  c++  java
  • array、list和set相互转化的方法

    这里总结一下Array、List和Set相互转化的方法。

    Array转化为List

    将Array转化为List是使用Arrays.asList()方法。

    String[] arr= new String[]{"yanggb1", "yanggb2", "yanggb3"};
    List list = Arrays.asList(arr);
    
    list.add("yanggb4"); // not ok
    list.remove("yanggb2"); // not ok

    要注意的是,Arrays.asList()方法的返回对象是一个Arrays内部类,并没有实现集合的修改方法。因此转化后的List并不能添加新元素或删除元素,会报错。

    实际上,Arrays.asList()方法体现的是适配器模式,只是转换接口,而后台的数据仍是数组。这就意味着,如果对转换后的list中的元素进行修改,修改的结果会反映到原来的数组中,因为操作的实际上是原来的数组。

    Array转Set

    将Array转Set是使用Set集合的构造方法。

    String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
    Set<String> set = new HashSet<>(Arrays.asList(arr));
    
    set.add(
    "yanggb4"); // ok set.remove("yanggb2"); // ok

    转换成Set集合之后可以添加元素或删除元素,因为是调用构造函数new出来的一个HashSet。

    另外要注意的是,对转换后的Set集合进行的操作并不会影响到原来的Array。

    System.out.println(set); // [yanggb3, yanggb1, yanggb4]
    System.out.println(arr[2]); // yanggb3

    也可以看到,这种方式转换出来的Set相对原来的的数据来说是倒序的。

    List转Set

    将List转Set同样是使用Set集合的构造方法。

    String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
    List<String> list = Arrays.asList(arr);
    Set<String> set = new HashSet(list);

    Set转List

    将Set转List也可以使用List的构造方法。

    String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
    Set<String> set = new HashSet<>(Arrays.asList(arr));
    List<String> list = new ArrayList<>(set);

    List或Set转Array

    List或Set转Array可以使用Collection.toArray()方法。

    String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
    List<String> list = Arrays.asList(arr);
    Set<String> set = new HashSet(list);
    String[] arr1 = list.toArray(new String[list.size()]);
    String[] arr2 = set.toArray(new String[set.size()]);

    这里要注意的是,调用Collection.toArray(T[] t)方法的集合需要有指定其中元素的具体类型,否则会出现类型转换无效的情况(编译直接报错),这时候需要强行转化才可以。

    String[] arr = new String[]{"yanggb1", "yanggb2", "yanggb3"};
    List list = Arrays.asList(arr);
    Set set = new HashSet(list);
    String[] arr1 = (String[])list.toArray();
    String[] arr2 = (String[])set.toArray();

    另外要注意的是,使用Collection.toArray()转换出来的数组是一个新的数组,不会影响到原来的数组。

    "有些人明明看起来很友善,却总是独来独往。"

  • 相关阅读:
    UML基本关系
    C++关键字简述
    Install opencv on Centos
    C++编程规范
    YCbCr to RGB and RGB toYCbCr
    Linux目录结构(二)
    Dubbo工作流程
    spring bean的作用域和生命周期
    spring aop原理和实现
    静态代理、jdk动态代理、cglib动态代理
  • 原文地址:https://www.cnblogs.com/yanggb/p/11765021.html
Copyright © 2011-2022 走看看