Potrzebowałem czegoś takiego, więc poszedłem do wspólnych kolekcji i użyłem SetUniqueList
, ale kiedy przeprowadziłem jakiś test wydajności, stwierdziłem, że wydaje się nie zoptymalizowany w porównaniu z przypadkiem, jeśli chcę użyć a Set
i uzyskać Array
użycieSet.toArray()
.
SetUniqueTest
Wzięło 20: 1 czas wypełnić, a następnie trawers 100000 Strings porównaniu do innych realizacji, która jest duża różnica sprawa.
Tak więc, jeśli martwisz się o wydajność, polecam ci użyć Set and Get an Array zamiast używać SetUniqueList
, chyba że naprawdę potrzebujesz logiki SetUniqueList
, wtedy musisz sprawdzić inne rozwiązania ...
Główna metoda testowania kodu :
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);
}
Pozdrawiam,
Mohammed Sleem