Avevo bisogno di qualcosa del genere, quindi sono andato alle raccolte comuni e SetUniqueList
ho usato il , ma quando ho eseguito alcuni test delle prestazioni, ho scoperto che non sembra ottimizzato rispetto al caso se voglio usare a Set
e ottenere un Array
usando il Set.toArray()
metodo.
Ci sono SetUniqueTest
voluti 20: 1 per riempire e quindi attraversare 100.000 stringhe rispetto all'altra implementazione, il che è una grande differenza.
Quindi, se ti preoccupi delle prestazioni, ti consiglio di usare Set and Get an Array invece di usare SetUniqueList
, a meno che tu non abbia davvero bisogno della logica di SetUniqueList
, allora dovrai controllare altre soluzioni ...
Metodo principale del codice di test :
public static void main(String[] args) {
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);
System.out.println((double)t2/1000/1000/1000);
System.out.println(((double) t1) / t2);
}
Saluti,
Mohammed Sleem