Il vero problema qui è che il PO non ci ha detto il vero problema. Quindi molte persone indovinano le strutture dati e postano le risposte senza pensarci veramente.
Il vero sintomo, come l'OP ha dichiarato in un commento, è che ci vuole 700ms a mettere le corde in un TreeSet, e un altro 700 ms per copiare che TreeSet in un ArrayList. Ovviamente, il programma non sta facendo quello che l'OP pensa che sia, dato che la copia dovrebbe richiedere al massimo qualche microsecondo. In effetti, il programma seguente, eseguito sul mio vecchio Thinkpad, impiega solo 360 ms per creare 100.000 stringhe casuali, metterle in un TreeSet e copiare TreeSet in una ArrayList.
Detto questo, l'OP ha selezionato una risposta (due volte). Forse se/quando l'OP decide di pensare al vero problema, questo esempio di SSCCE sarà utile. È CW, quindi sentitevi liberi di modificarlo.
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;
}
}
Perché non si utilizza semplicemente un TreeSet e quindi si costruisce il SortedList con il costruttore SortedList (Collection <>)? SortedSet <> implementa Collection <> – fge
Qualsiasi cosa tu faccia su un computer "prendi [s] tempo". Hai misurato questa particolare parte del tuo programma e hai scoperto che ci vuole un * periodo di tempo * inaccettabile? E se sì, cosa è "irragionevole" nel tuo caso? Ore, secondi o millisecondi? – kdgregory
33082 record hanno preso 710 ms per il metodo addAll, dove i record possono estendersi fino a lakh, che richiede molto tempo giusto? Anche costruire il Treeset ha richiesto lo stesso 704ms, ma questo è permissibile, ma questo addAll prende tutto il tempo necessario per costruire, quindi ho pensato di poter tagliare questo costo e far funzionare il mio programma più velocemente. – cypronmaya