[java] arrayList.toArray ()가 더 구체적인 유형을 반환하게하십시오.

그래서, 보통 ArrayList.toArray()의 유형을 반환합니다 Object[]….하지만이의 가정
Arraylist개체의 Custom내가 어떻게해야합니까, toArray()의 유형을 반환하는 Custom[]것보다 Object[]?



답변

이처럼 :

List<String> list = new ArrayList<String>();

String[] a = list.toArray(new String[0]);

Java6 이전에는 다음을 작성하는 것이 좋습니다.

String[] a = list.toArray(new String[list.size()]);

내부 구현은 어쨌든 적절한 크기의 배열을 재 할당하므로 선 입선 작업을 더 잘 수행 할 수 있기 때문입니다. Java6 빈 배열이 선호 되므로 .toArray (new MyClass [0]) 또는 .toArray (new MyClass [myList.size ()])?를 참조하십시오.

목록이 올바르게 입력되지 않은 경우 toArray를 호출하기 전에 캐스트를 수행해야합니다. 이처럼 :

    List l = new ArrayList<String>();

    String[] a = ((List<String>)l).toArray(new String[l.size()]);


답변

Object[]예를 들어 실제로 반환 할 필요는 없습니다 .

    List<Custom> list = new ArrayList<Custom>();
    list.add(new Custom(1));
    list.add(new Custom(2));

    Custom[] customs = new Custom[list.size()];
    list.toArray(customs);

    for (Custom custom : customs) {
        System.out.println(custom);
    }

Custom수업은 다음과 같습니다 .

public class Custom {
    private int i;

    public Custom(int i) {
        this.i = i;
    }

    @Override
    public String toString() {
        return String.valueOf(i);
    }
}


답변


답변

나는 대답을 얻었습니다 … 이것은 완벽하게 잘 작동하는 것 같습니다

public int[] test ( int[]b )
{
    ArrayList<Integer> l = new ArrayList<Integer>();
    Object[] returnArrayObject = l.toArray();
    int returnArray[] = new int[returnArrayObject.length];
    for (int i = 0; i < returnArrayObject.length; i++){
         returnArray[i] = (Integer)  returnArrayObject[i];
    }

    return returnArray;
}


답변

@SuppressWarnings("unchecked")
    public static <E> E[] arrayListToArray(ArrayList<E> list)
    {
        int s;
        if(list == null || (s = list.size())<1)
            return null;
        E[] temp;
        E typeHelper = list.get(0);

        try
        {
            Object o = Array.newInstance(typeHelper.getClass(), s);
            temp = (E[]) o;

            for (int i = 0; i < list.size(); i++)
                Array.set(temp, i, list.get(i));
        }
        catch (Exception e)
        {return null;}

        return temp;
    }

샘플:

String[] s = arrayListToArray(stringList);
Long[]   l = arrayListToArray(longList);


답변