Tôi cần một cái gì đó như vậy, vì vậy tôi đã đi đến bộ sưu tập commons và sử dụng SetUniqueList, nhưng khi tôi chạy một số thử nghiệm hiệu suất, tôi thấy rằng nó có vẻ không được tối ưu hóa so với trường hợp nếu tôi muốn sử dụng một Set và một mảng bằng cách sử dụng phương thức Set.toArray(), SetUniqueTest mất 20: 1 thời gian để điền và sau đó đi qua 100.000 chuỗi so với triển khai khác, đó là một sự khác biệt lớn, vì vậy Nếu bạn lo lắng về hiệu suất, tôi khuyên bạn nên sử dụng Set và có được một mảng thay vì sử dụng SetUniqueList, trừ khi bạn thực sự cần logic của SetUniqueList, sau đó bạn cần phải kiểm tra các giải pháp khác ...
việc thử nghiệm phương pháp mã chính:
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); //seconds
System.out.println((double)t2/1000/1000/1000); //seconds
System.out.println(((double) t1)/t2); //comparing results
}
Trân Mohammed Sleem http://abusleem.net/blog
Nguồn
2009-07-21 20:50:41
Tại sao cần triển khai Danh sách? Các bộ có thể lặp lại, như danh sách, vì vậy tôi cho rằng phương thức nhận đang thực thi Danh sách vì một số lý do khác. – Rob
@Rob Đúng vậy, đó là một nhu cầu bên ngoài, và cấu trúc dữ liệu bao gồm một địa ngục nhiều hơn một Danh sách. – Yuval
Nếu người dùng muốn một DANH SÁCH, thì rõ ràng là cần các phương thức của giao diện LIST không có mặt giao diện SET ... – marcolopes