Necesitaba algo así, así que fui a las colecciones de commons y utilicé SetUniqueList, pero cuando realicé una prueba de rendimiento, encontré que no parece optimizado en comparación con el caso si quiero usar un conjunto y obtener una matriz que utiliza el método Set.toArray(), el SetUniqueTest tardó 20: 1 tiempo en completarse y luego recorrer 100.000 Strings en comparación con la otra implementación, lo cual es una gran diferencia, por lo que si te preocupa el rendimiento, te recomiendo utilice el conjunto y obtener una matriz en lugar de utilizar el SetUniqueList, a menos que realmente necesita la lógica de la SetUniqueList, entonces usted necesita para comprobar otras soluciones ...
el método principal de código de prueba:
public void main (String [] args) estáticas {
SetUniqueList pq = SetUniqueList.decorate(new ArrayList());
Set s = new TreeSet();
long t1 = 0L;
long t2 = 0L;
String t;
t1 = System.nanoTime();
for (int i = 0; i < 200000; i++) {
pq.add("a" + Math.random());
}
while (!pq.isEmpty()) {
t = (String) pq.remove(0);
}
t1 = System.nanoTime() - t1;
t2 = System.nanoTime();
for (int i = 0; i < 200000; i++) {
s.add("a" + Math.random());
}
s.clear();
String[] d = (String[]) s.toArray(new String[0]);
s.clear();
for (int i = 0; i < d.length; i++) {
t = d[i];
}
t2 = System.nanoTime() - t2;
System.out.println((double)t1/1000/1000/1000); //seconds
System.out.println((double)t2/1000/1000/1000); //seconds
System.out.println(((double) t1)/t2); //comparing results
}
Saludos Mohammed Sleem http://abusleem.net/blog
¿Por qué es necesario implementar List? Los conjuntos son iterables, al igual que las listas, por lo que supongo que el método de recepción está aplicando la Lista por algún otro motivo. – Rob
@Rob Así es, es una demanda externa, y la estructura de datos incluye mucho más de una lista. – Yuval
Si el usuario quiere una LISTA, está claro que necesita métodos de la interfaz LIST que no estén presentes en la interfaz SET ... – marcolopes