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()转换出来的数组是一个新的数组,不会影响到原来的数组。

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

  • 相关阅读:
    [置顶] Spring的自动装配
    BZOJ2831(小强的金字塔系列问题--区域整点数求法)
    国际跆拳道联盟
    Linux如何查找某个时间点后生成的空文件
    ORACLE中关于外键缺少索引的探讨和总结
    ORA-12514, TNS:listener does not currently know of service requested in connect descriptor案例2
    SQL Server 2005 sp_send_dbmail出现Internal error at FormatRowset (Reason: Not enough storage is available to complete this operation)
    SQL Server数据库邮件发送异常案例
    MySQL二进制日志总结
    OSWatcher使用过程中小问题解决方法
  • 原文地址:https://www.cnblogs.com/yanggb/p/11765021.html
Copyright © 2011-2022 走看看