zoukankan      html  css  js  c++  java
  • collection.toArray(new String[0])中new String[0]的作用

    new string[0]的作用

    比如:String[] result = set.toArray(new String[0]);


    Collection的公有方法中,toArray()是比较重要的一个。
    但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]。 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组,比如String[]时,问题就来了。而把Object[]给cast成 String[]还是很麻烦的,需要用到这个:

    String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);

    不管是从哪方面看还是一开始就弄成String[]比较好。

    具体怎么办呢?其实用带参数的toArray就好了。官方是这样给出的例子:
    String[] a = c.toArray(new String[0]);

    如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。这里给的参数的数组长度是0,因此就会返回包含此 collection 中所有元素的数组,并且返回数组的类型与指定数组的运行时类型相同。


    像 toArray 方法一样,此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许在输出数组的运行时类型上进行精确控制,并且在某些情况下,可以用来节省分配开销。

    假定 l 是只包含字符串的一个已知 List。以下代码用来将该列表转储到一个新分配的 String 数组: 

         String[] x = (String[]) v.toArray(new String[0]);
     注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。 

    参数:
    a - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。

     1   public <T> T[] toArray(T[] a) {
     2             int size = size();
     3             if (a.length < size)
     4                 return Arrays.copyOf(this.a, size,
     5                                      (Class<? extends T[]>) a.getClass());
     6             System.arraycopy(this.a, 0, a, 0, size);
     7             if (a.length > size)
     8                 a[size] = null;
     9             return a;
    10         }
  • 相关阅读:
    IsBadReadPtr|IsBadWritePtr调试崩溃
    VSCode配置python调试环境
    Visual Studio Code 如何编写运行 C、C++ 程序?
    使用nginx做反向代理
    Win10环境下配置VScode的C++编译环境
    关于java 获取 html select标签 下拉框 option 文本内容 隐藏域
    【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】
    VS Code 配置 C/C++ 环境
    改变你一生的编辑器:VSCode使用总结
    CentOS7,安装Tomcat8.5、JDK1.8,并设置开机启动(Linux CentOS Tomcat、JDK+Tomcat、Tomcat开机自启动)
  • 原文地址:https://www.cnblogs.com/blog-cq/p/5680104.html
Copyright © 2011-2022 走看看