HashSet hs = new HashSet(num,1);
Object[] objs=hs.toArray();
String[] strArray=new String[objs.length];
for(int i=0;i<objs.length;i++){
strArray[i]=objs[i].toString();
}
Object[] objs=hs.toArray();
String[] strArray=new String[objs.length];
for(int i=0;i<objs.length;i++){
strArray[i]=objs[i].toString();
}
<<
return (String[])hs.toArray(new String[0]);
>>
xiaohaiz(老土进城,两眼通红)
参数什么意思?API看不明白?那只能你自己看。别人帮不了什么忙。
但是俺们可以在这里解析一下toArray(Object[])的源代码是如何实现的,希望能够帮助你理解:
@see AbstractCollection#toArray(Object[])
<<
public Object[] toArray(Object a[]) {
int size = size();
if (a.length < size)
a = (Object[])java.lang.reflect.Array.newInstance(
a.getClass().getComponentType(), size); Iterator it=iterator();
for (int i=0; i<size; i++)
a[i] = it.next(); if (a.length > size)
a[size] = null; return a;
}
>>
这段可以看明白吧?使用传入参数Object[]来指定聚集需要返回元素的类型。:)
关键在这一句:
<<
a = (Object[])java.lang.reflect.Array.newInstance(
a.getClass().getComponentType(), size);
>>
BTW,这里也给大家提供了如何动态扩展数组的方法。:) 使用size(聚集的长度)来把指定的数组扩展到需要的长度。
还有一点可以看到,输入的参数和返回的Object[]是一个地址。
以下的断言是成立的:
<<
Object[] a = new Object[0];
Object b = hs.toArray(a);
assertSame(a, b);
>>
留一个问题你可以自己思考一下,为什么这么做不会出现ClassCastException。