Tùy chọn 1: Đừng quan tâm. Nếu bạn nhìn vào việc thực hiện java HashSet bạn phát hiện ra rằng nó chỉ đơn giản là sử dụng một HashMap nội bộ:
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map;
....
Đó là một thực hiện nhanh chóng, tuy nhiên, mỗi mục thiết có một tham chiếu đến một giá trị, đó không phải là cần thiết. Do đó tiêu thụ bộ nhớ. Lựa chọn đầu tiên của tôi là "không quan tâm", vì tôi hy vọng rằng đôi khi trong tương lai ai đó sẽ cung cấp một HashSet cải tiến trong JDK. Kỹ sư phần mềm nên luôn luôn có hy vọng và thái độ tích cực :)
Trong logic chương trình bình thường, tôi luôn tuân thủ các tiêu chuẩn được cung cấp càng nhiều càng tốt và sử dụng những gì có sẵn. Điều này tránh được hiệu quả mà mỗi lập trình viên sử dụng "cài đặt Bộ yêu thích" của riêng mình, hoặc thậm chí tệ hơn, thực hiện một nghiên cứu kéo dài thực hiện HashSet thực sự tốt nhất để sử dụng là gì;)
Oracle có vé lỗi mở cho người nghèo Bản đồ băm? Không thể tìm thấy một ...
Tùy chọn 2: Chăm sóc. Nếu bạn không có giá trị logic kinh doanh nhưng trong một số mã phần mềm trung gian kỹ thuật, thì hiệu suất có thể quan trọng. Sau đó, có nhiều tùy chọn khác nhau. Bản đồ CompactHashMap trong Google Guava là một. Một thư viện thú vị khác là High Performance Primitive Collections. Trong HPPC, bạn cũng tìm thấy các bộ cho mọi kiểu nguyên thủy. Tôi nghĩ bạn cũng sẽ tìm thấy những thứ khác phù hợp với mục đích cụ thể của bạn. Không phải mọi thay thế HashMap đều có thể có cùng ngữ nghĩa giống như HashMap gốc.
Vì vậy, cá nhân tôi sẽ không bao giờ thay thế java.util.HashMap chỉ "theo mặc định".
Tại sao thêm một phụ thuộc JAR khác vào dự án của bạn khi 'HashSet' hoạt động hoàn toàn tốt? Trừ khi tất nhiên bạn đang phát triển các ứng dụng độ trễ thấp và bạn * biết * rằng bạn có vấn đề về hiệu suất hoặc bộ nhớ heap – Brad
bạn có vấn đề về hiệu suất khi sử dụng HashSets không? Nếu có, hãy làm các tiêu chuẩn của riêng bạn, và xem những gì nó làm tốt. Sau đó, bạn có thể quyết định xem bạn có cần chuyển đổi hay không. – njzk2
liên kết đầu tiên của bạn hiển thị so sánh khá tốt. Nếu 'CompactHashSet' cung cấp mọi thứ mà một' HashSet' cung cấp và có thể nhiều hơn, tại sao không chỉ sử dụng nó? –