Tôi cần một cái gì đó như vậy, vì vậy tôi đã đi đến các bộ sưu tập commons và sử dụng SetUniqueList
, nhưng khi tôi chạy một số kiểm tra 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 a Set
và lấy một Array
bằng cách sử dụng Set.toArray()
phương thức.
Các SetUniqueTest
mất 20: 1 thời gian để điền vào và sau đó đi qua 100.000 Strings so với việc thực hiện khác, đó là một sự khác biệt to tát.
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 Đặt và Lấy một mảng thay vì sử dụng SetUniqueList
, trừ khi bạn thực sự cần logic của SetUniqueList
, khi đó bạn sẽ cần kiểm tra các giải pháp khác ...
Phương pháp chính của mã kiểm tra :
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);
}
Trân trọng,
Mohammed Sleem