Saya membutuhkan sesuatu seperti itu, jadi saya pergi ke koleksi commons dan menggunakan SetUniqueList
, tetapi ketika saya menjalankan beberapa tes kinerja, saya menemukan bahwa tampaknya tidak dioptimalkan dibandingkan dengan kasus jika saya ingin menggunakan Set
dan mendapatkan Array
menggunakan Set.toArray()
metode tersebut.
Diperlukan SetUniqueTest
waktu 20: 1 untuk mengisi dan kemudian melintasi 100.000 String dibandingkan dengan implementasi lainnya, yang merupakan perbedaan besar.
Jadi, jika Anda khawatir tentang kinerjanya, saya sarankan Anda untuk menggunakan Set dan Dapatkan Array daripada menggunakan SetUniqueList
, kecuali jika Anda benar-benar membutuhkan logika SetUniqueList
, maka Anda harus memeriksa solusi lain ...
Menguji metode utama kode :
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);
}
Hormat kami,
Mohammed Sleem