Collection的公有方法中,toArray()是比较重要的一个。
- 但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]。 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组,比如String[]时,问题就来了。而把Object[]给cast成 String[]还是很麻烦的,需要用到这个:
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);
- 用带参数的toArray就好了。官方是这样给出的例子:
String[] a = c.toArray(new String[0]);
如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。这里给的参数的数组长度是0,因此就会返回包含此 collection 中所有元素的数组,并且返回数组的类型与指定数组的运行时类型相同
public void test4(){
HashMap<String,String> map=new HashMap<>();
map.put("1","jk");
map.put("2","kjk");
String[] array = map.keySet().toArray(new String[3]);//1,2,null
for (String a:array) {
System.out.println(a);
}
}
- 底层
public <T> T[] toArray(T[] a) { int size = size(); if (a.length < size) return Arrays.copyOf(this.a, size, (Class<? extends T[]>) a.getClass()); System.arraycopy(this.a, 0, a, 0, size); if (a.length > size) a[size] = null; return a; }