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         }
时间: 2024-08-09 14:47:08

collection.toArray(new String[0])中new String[0]的作用的相关文章

在selenium2.0中使用selenium1.0的API

Selenium2.0中使用WeDriver API对页面进行操作,它最大的优点是不需要安装一个selenium server就可以运行,但是对页面进行操作不如selenium1.0的Selenium RC API那么方便.Selenium2.0提供了使用Selenium RC API的方法: 1 // You may use any WebDriver implementation. Firefox is used hereas an example 2 WebDriver driver =

C# static void Main(String[] args) 中参数String[] args 的理解

定义一个String[]类型的数组args,表示从命令行传入的参数(类似于Java) ,假如在命令行输入: 1 d:\A.exe a ab abc 表示在d盘的根目录下执行A.exe 这个可执行文件,传入参数有3个分别是 a ab abc   ,即args[0]="a"  , args[1]="ab" ,args[2]="abc"

java中关于String 类型数据 的存储方式

Constant Pool常量池的概念: 在讲到String的一些特殊情况时,总会提到String Pool或者Constant Pool,但是我想很多人都不太 明白Constant Pool到底是个怎么样的东西,运行的时候存储在哪里,所以在这里先说一下Constant Pool的内容. String Pool是对应于在Constant Pool中存储String常量的区域.习惯称为String Pool,也有人称为 String Constant Pool.好像没有正式的命名?? 在java编

C++中关于string类型究竟能不能用cout输出的问题

先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or

VC 6.0中添加库文件和头文件 【转】

本文转载自:http://blog.sina.com.cn/s/blog_9d3971af0102wxjq.html 加头文件包含 VC6.0中: VC6.0默认include包含路径:Tools>Options>Directories>Include files. 对于特定项目的头文件包含,在“Project Setting>C/C++ >Category:(选Preprocessor)>Additional include directories”处添加附加头文件目

在JAVA中 解析String,形如(0&lt;p&lt;10 or 0&lt;=p&lt;10 or 0&lt;p&lt;=10 or 0&lt;=p&lt;=10)的字符串,看所传入的参数是否在表达式内

今天在项目中需要解析一个参数范围的字符串,然后判断一个传入参数是否在这个表达式内.因为参数范围字符串是(0<p<10 or 0<=p<10 or 0<p<=10 or 0<=p<=10)的组合,所以我觉得直接去进行split处理比较麻烦,就运用了String转为 byte[] 再做处理.代码如下. 不知道大家有没有更好的处理方式. package test_lzg; import java.util.ArrayList; import java.util.L

Android研发中对String的思考(源代码分析)

1.经常使用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是运行了三件事 1.声明变量 String text; 2.在内存中开辟空间 (内存空间一) 3.将变量的text的引用指向开辟的内存空间 当有 text = "this is a change text"; 这一句话运行了两件事 1.在内存中开辟空间 2.将变量text 的引用指向 新开辟的内存空间 3.内存空间一此时依旧存在,这就是说明了St

Android研发中对String的思考(源码分析)

1.常用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是执行了三件事 1.声明变量 String text; 2.在内存中开辟空间 (内存空间一) 3.将变量的text的引用指向开辟的内存空间 当有 text = "this is a change text"; 这一句话执行了两件事 1.在内存中开辟空间 2.将变量text 的引用指向 新开辟的内存空间 3.内存空间一此时依然存在,这就是说明了Stri

Java中的String、StringBuffer以及StringBuilder的用法和区别

String String的构造方式有n种(据说n==11),常见的例举一二: // 1 String s1 = "hello world"; // 2 String s2 = new String("hello world"); // 3 char[] a = {'h', 'e', 'l', 'l', 'o'}; String s3 = new String(a, 1, 3); // start length // 4 String s4 = "hell