Nếu các yếu tố của bạn bằng cách nào đó So sánh (thực tế là thứ tự có ý nghĩa thực sự là vô tư - nó chỉ cần nhất quán với định nghĩa bình đẳng của bạn), giải pháp loại bỏ trùng lặp nhanh nhất sắp xếp danh sách (0 (n log (n))) sau đó thực hiện một lần truyền và tìm kiếm các thành phần lặp lại (có nghĩa là, các phần tử bằng nhau theo sau) (đây là O (n)).
Độ phức tạp tổng thể sẽ là O (n log (n)), gần giống như những gì bạn nhận được với một Set (n lần dài (n)), nhưng với một hằng số nhỏ hơn nhiều. Điều này là do hằng số trong sắp xếp/dedup kết quả từ chi phí so sánh các phần tử, trong khi chi phí từ tập hợp có nhiều khả năng là kết quả từ một phép tính băm, cộng với một (có thể một số) so sánh băm. Nếu bạn đang sử dụng cài đặt Tập hợp dựa trên băm, nghĩa là, vì một Cây dựa trên sẽ cung cấp cho bạn một O (n log² (n)), điều này thậm chí còn tồi tệ hơn.
Tuy nhiên, tôi hiểu rằng bạn không cần phải xóa trùng lặp mà chỉ kiểm tra sự tồn tại của chúng. Vì vậy, bạn nên viết mã một thuật toán sắp xếp hợp nhất hoặc đống trên mảng của bạn, mà chỉ đơn giản là thoát trở lại đúng (nghĩa là "có một") nếu so sánh của bạn trả về 0, và nếu không hoàn thành sắp xếp, và đi qua kiểm tra mảng được sắp xếp để lặp lại . Trong một sắp xếp hợp nhất hoặc đống, thực sự, khi sắp xếp được hoàn thành, bạn sẽ so sánh mọi cặp trùng lặp trừ khi cả hai phần tử đã ở vị trí cuối cùng của chúng (điều này không chắc chắn).Do đó, thuật toán sắp xếp tinh chỉnh sẽ mang lại hiệu suất rất lớn (tôi sẽ phải chứng minh điều đó, nhưng tôi đoán thuật toán được chỉnh sửa phải ở trong O (log (n)) trên dữ liệu ngẫu nhiên thống nhất)
Nếu "Chặn" được so sánh bởi một int, bạn có lẽ nên có hashCode trả về cùng một int và có bằng so sánh e những ints. –