Pertanyaan make arrayList.toArray () mengembalikan tipe yang lebih spesifik


Jadi, biasanya ArrayList.toArray() akan mengembalikan sejenis Object[].... tapi seharusnya itu adalah sebuah Arraylist objek Custom, bagaimana saya membuatnya toArray() untuk mengembalikan sejenis Custom[] daripada Object[]?


144
2018-02-21 02:07


asal


Jawaban:


Seperti ini:

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

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

Sangat menggoda untuk melakukannya seperti:

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

tetapi implementasi internal akan merealokasikan array berukuran tepat, jadi Anda lebih baik melakukannya di muka.

Jika daftar Anda tidak diketik dengan benar, Anda perlu melakukan cast sebelum memanggil toArray. Seperti ini:

    List l = new ArrayList<String>();

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

250
2018-02-21 02:19



Tidak perlu kembali Object[], sebagai contoh:-

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

Inilah saya Custom kelas:-

public class Custom {
    private int i;

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

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

12
2018-02-21 02:16



arrayList.toArray(new Custom[0]);

http://download.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28java.lang.Object[]%29


4
2018-02-21 02:15



Saya mendapat jawabannya ... ini sepertinya bekerja dengan baik

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

0
2018-02-02 04:42



@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;
    }

Sampel:

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

0
2018-03-16 14:14