Java - самый эффективный способ преобразовать TreeSet <String>в строку []? - PullRequest
5 голосов
/ 12 февраля 2012

Я делал это:

(String[]) myTreeSet.toArray();

, но это дает мне ClassCastException во время выполнения.

Единственное, что я могу придумать, это сначала создать массив, а затем перебрать каждый элемент в myTreeSet и добавить его в массив.Кажется, должен быть лучший способ, чем этот.Есть или я должен просто сделать это?

Спасибо.

Ответы [ 2 ]

19 голосов
/ 12 февраля 2012
String[] result = myTreeSet.toArray(new String[myTreeSet.size()]);
3 голосов
/ 12 февраля 2012

При использовании toArray() происходит следующее: новый массив объектов выделяется с помощью new Object[size], и каждый элемент массива будет ссылкой на один из ваших элементов строки.Даже если на самом деле указывает на строки, это массив типа Object.

. При использовании toArray(T[] a) происходит следующее: новые T-массивы выделяются с помощью

java.lang.reflect.Array
              .newInstance(a.getClass().getComponentType(), size) 

и каждый из массива будет ссылкой на одну из ваших строк, потому что a.getClass().getComponentType вернет String.class в вашем случае.На этот раз это массив типа String.

...