栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数组集合互相转换的时候应该注意的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组集合互相转换的时候应该注意的问题

数组转换成集合
  • 可以使用Arrays.asList()方法。

    • Integer[] a = {1,2,3,4};
      List list = Arrays.asList(a);
      System.out.println(list);
      
      • 输出结果:,集合里存放的是单个的数字。

      • 特别注意:这里数组不能使用int[]来定义,因为集合需要指定泛型,而泛型只能是引用类型,Arrays.asList()方法返回的集合的泛型会和数组类型一致,但是如果数组类型是基本数据类型而不是引用类型,则会将整个数组int[]当成泛型类型。此时集合里的元素就不再是单个的数字,而是整个整个的数组了:

        int[] a = {1,2,3,4};
        List list = Arrays.asList(a);
        System.out.println(list);
        
        • 输出结果:,集合里存放的是数组。
  • Arrays.asList方法返回一个List,是一个视图,它的底层仍然是数组,因此不能使用add,remove方法,因为这会改变数组大小,只能使用访问底层数组的get和修改数组元素的set方法。

    1. 修改方法set():

      Integer[] a = {1,2,3,4};
      List list = Arrays.asList(a);
      System.out.println(list);
      list.set(0,111);
      System.out.println(list);
      
      • 结果:
    2. add()/remove()方法:

      Integer[] a = {1,2,3,4};
      List list = Arrays.asList(a);
      list.add(1);//list.remove(1);
      
      • 结果:
    • 从源码分析:
      • 这个方法返回的是一个Arrays的内部类java.util.Arrays$ArrayList。这个内部类继承了AbstractList,而AbstractList又继承了List。因此我们得用List来接收这个结果,不能用ArrayList!!!
      • 此时我们使用返回的List类型的集合并调用这个集合的方法,在运行的时候根据动态绑定机制会去运行类型java.util.Arrays$ArrayList中调用这个方法,而java.util.Arrays$ArrayList这个类是没有add()和remove()这两个方法的,因此我们调用会失败。
    • 额外:集合的subList()方法返回的视图没有操作限制,可以将任何增删改操作应用于这个视图,同时它会影响到原集合例如删除这个子视图相当于删除了元集合中的这些元素。
集合转换成数组
  • List集合的toArray()方法可以将集合转成对应类型的数组:

    ArrayList arrayList = new ArrayList<>();
    arrayList.add(1);
    arrayList.add(2);
    arrayList.add(3);
    arrayList.add(5);
    Object[] objects1 = arrayList.toArray();//直接返回会返回一个Object类型的数组
    Integer[] integers1 = arrayList.toArray(new Integer[0]);//添加这个参数即可,下面解释
    
    • 如果直接调用toArray()将返回一个对象数组,此时由于数组的类型是不能强制转换的,即即使当前Obeject数组中的元素都是Integer类型也无法将它转换成Integer类型的数组。
    • 想要获得指定类型的数组必须在方法里new一个这种类型的数组,此时就会返回一个同类型的数组。参数中数组的长度小于集合大小会自动扩大到集合大小,长度大于集合大小多余的位置填null。
    • 对返回的数组的操作不会影响到该集合:
  • 数组没有类型转换,即不能将int类型的数组转换成Object类型的数组。但是集合这样是可以的:

    • List f = new ArrayList<>();
      ArrayList c = (ArrayList)f;
      
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号