El verdadero problema aquí es que el PO no nos ha dicho el verdadero problema. Entonces, mucha gente adivina las estructuras de datos y publica respuestas sin pensar realmente.
El verdadero síntoma, como el OP se indica en un comentario, es que se tarda 700ms para poner las cadenas en un TreeSet, y otros 700 ms para copiar que TreeSet en un ArrayList. Obviamente, el programa no está haciendo lo que el OP cree que es, ya que la copia debería tomar como máximo unos pocos microsegundos. De hecho, el siguiente programa, que se ejecuta en mi antiguo Thinkpad, requiere solo 360 ms para crear 100.000 cadenas aleatorias, colocarlas en un TreeSet y copiar ese TreeSet en ArrayList.
Dicho esto, el OP ha seleccionado una respuesta (dos veces). Tal vez si/cuando el OP decide pensar sobre el problema real, este ejemplo de un SSCCE será útil. Es CW, así que siéntete libre de editarlo.
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;
}
}
¿Por qué no solo usa un TreeSet y luego crea su SortedList con el constructor SortedList (Collection <>)? SortedSet <> implementa Collection <> – fge
Cualquier cosa que haga en una computadora "tome [s] tiempo". ¿Ha medido esta parte particular de su programa y descubrió que toma una * cantidad de tiempo inaceptable *? Y si es así, ¿qué es "irrazonable" en su caso? Horas, segundos o milisegundos? – kdgregory
33082 registros tomaron 710ms para el método addAll, donde los registros pueden extenderse a lakhs, lo que toma mucho tiempo ¿no? Además, construir Treet tomó los mismos 704 ms, pero eso es permisible, pero este addAll toma tanto tiempo como la construcción, por lo que pensé que podría reducir este costo y hacer que mi programa funcione más rápido. – cypronmaya