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();
}

解决方案 »

  1.   

    对API的使用不足啊,这样:
    <<
    return (String[])hs.toArray(new String[0]);
    >>
      

  2.   

    看api,不懂。参数是什么意思?请教
    xiaohaiz(老土进城,两眼通红)
      

  3.   

    TO sunruiandxwh(孙蕊) :
    参数什么意思?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。