• 集合与数组,集合与集合之间的转换



    1、集合与数组之间的转换

    集合中如List和Set,都和数组有着高度的相似性,既然如此,实际上集合转数组也是情理之中的事情。

    1.1 集合转数组 toArray

    看几个常用的集合类,如上图继承关系图,可以看到他们都集成了一个抽象类AbstractCollection,这个类中就实现了Collection接口的两个方法:
    • toArray ( )
    • toArray ( T[ ] a )
     
    前者的返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据类型转换的,如下:
    List<Integer> pod = new ArrayList<Integer>(); 
    
    for(int i = 0; i < 5; i++){
      pod.add(i);
    }
    
    Integer[] t=(Integer[])pod.toArray();

    结果就是报错:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

    所以像如上情况,就应该使用第二种方法:
    • toArray(T[ ] a) 
    • 如果数组a的长度足够放入整个集合的数据,那么所有数据会放入到数组a当中
    • 如果数组a的长度不够,那么会把所有数据放入到一个新的数组中返回

    List<Integer> pod=new ArrayList<Integer>();
    
    for(int i=0;i<5;i++){
        pod.add(i);
    }
    
    //第一种
    Integer[] t=new Integer[pod.size()];
    pod.toArray(t);
    
    //第二种
    Integer[] t3=new Integer[1];
    Integer[] t2=pod.toArray(t3);

    即以上的 t 和 t2 都是我们期望得到的数组。

    1.2 数组转集合 asList

    数组转集合,就要利用到数组的工具类Arrays了,该类中定义了数组转为List的一个方法:
    • asList(T... a)
    • 返回一个装载了数组a中所有数据的固定长度的List

    public static void main(String[] args) {
        String[] pod = new String[]{"haha", "xixi", "heihei"};
        List<String> list = Arrays.asList(pod);
    
        for (String bean : list) {
            System.out.println(bean);
        }
    }

    如果希望转换为长度可变的List,则利用ArrayList构造方法:
    public static void main(String[] args) {
        String[] pod = new String[]{"haha", "xixi", "heihei"};
        List<String> list = Arrays.asList(pod);
        List<String> newList = new ArrayList<String>(list);
    
        for (String bean : newList) {
            System.out.println(bean);
        }
    }


    2、集合与集合之间的转换 addAll

    刚才我们提到了集合类的继承关系图,在抽象类AbstractCollection,还实现了Collection接口中的一个方法,叫addAll,具体实现类对该方法多少进行了重写:
     
    这里返回的布尔值是指,如果List集合对象由于调用addAll方法而发生更改,则返回true

    如下示例,TreeSet转换为List类型:
    public static void main(String[] args) {
        TreeSet<Integer> pod = new TreeSet<Integer>();
        pod.add(1);
        pod.add(3);
        pod.add(2);
        
        List<Integer> list = new ArrayList<Integer>();
        list.addAll(pod);
    
        for (Integer bean : list) {
            System.out.println(bean);
        }
    }

    3、参考链接



  • 相关阅读:
    手游页游和端游的服务端的架构与区别
    TiKV 源码解析系列——如何使用 Raft
    TiKV 源码解析系列
    三篇文章了解 TiDB 技术内幕 —— 谈调度
    三篇文章了解 TiDB 技术内幕——说计算
    三篇文章了解 TiDB 技术内幕——说存储
    TiDB 源码阅读系列文章(一)序
    【合集】TiDB 源码阅读系列文章
    9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
    python datetime和unix时间戳之间相互转换
  • 原文地址:https://www.cnblogs.com/deng-cc/p/8072930.html
Copyright © 2020-2023  润新知