Реальная проблема здесь в том, что OP не сообщил нам реальную проблему . Так много людей гадают о структуре данных и публикуют ответы, не задумываясь.
Настоящий признак , как указано в комментарии в ОП, состоит в том, что для помещения строк в TreeSet требуется 700 мс, а еще 700 мс для копирования этого TreeSet в ArrayList. Очевидно, что программа не делает то, о чем думает ОП, поскольку копирование должно занимать не более нескольких микросекунд. Фактически, приведенная ниже программа, работающая на моем древнем Thinkpad, занимает всего 360 мс, чтобы создать 100 000 случайных строк, поместить их в TreeSet и скопировать этот TreeSet в ArrayList.
Тем не менее, ОП выбрал ответ (дважды). Возможно, если / когда ОП решит подумать о реальной проблеме, этот пример SSCCE будет полезен. Это CW, так что не стесняйтесь редактировать его.
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;
public class Microbench
{
public static void main(String[] argv)
throws Exception
{
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
long start = threadBean.getCurrentThreadCpuTime();
executeTest();
long finish = threadBean.getCurrentThreadCpuTime();
double elapsed = (finish - start) / 1000000.0;
System.out.println(String.format("elapsed time = %7.3f ms", elapsed));
}
private static List<String> executeTest()
{
String[] data = generateRandomStrings(100000);
TreeSet<String> set = new TreeSet<String>();
for (String s : data)
set.add(s);
return new ArrayList<String>(set);
}
private static String[] generateRandomStrings(int size)
{
Random rnd = new Random();
String[] result = new String[size];
for (int ii = 0 ; ii < size ; ii++)
result[ii] = String.valueOf(rnd.nextLong());
return result;
}
}