Câu trả lời Jon Skeet giải quyết tốt hai tình huống (bản đồ có null
giá trị và không có null
giá trị) một cách hiệu quả.
Về các mục số và mối quan tâm hiệu quả, tôi muốn thêm một cái gì đó.
Tôi có một HashMap với 1.000 mục nhập và tôi đang xem xét cải thiện hiệu quả. Nếu HashMap đang được truy cập rất thường xuyên, thì việc kiểm tra sự tồn tại của khóa tại mỗi lần truy cập sẽ dẫn đến một chi phí lớn.
Một bản đồ với 1.000 mục không phải là một bản đồ lớn.
Cũng như một bản đồ với 5.000 hoặc 10.000 mục.
Map
được thiết kế để thực hiện truy xuất nhanh với kích thước như vậy.
Bây giờ, nó giả định rằng hashCode()
các phím bản đồ cung cấp phân phối tốt.
Nếu bạn có thể sử dụng một Integer
loại khóa, hãy làm điều đó. Phương pháp
của nó hashCode()
rất hiệu quả do các va chạm là không thể đối với int
các giá trị duy nhất :
public final class Integer extends Number implements Comparable<Integer> {
...
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
...
}
Nếu đối với khóa, bạn phải sử dụng một loại tích hợp khác như String
ví dụ thường được sử dụng Map
, bạn có thể có một số va chạm nhưng từ 1 nghìn đến vài nghìn đối tượng trong đó Map
, bạn nên có rất ít trong số đó làString.hashCode()
phương thức cung cấp một phân phối tốt.
Nếu bạn sử dụng một loại tùy chỉnh, ghi đè hashCode()
và equals()
chính xác và đảm bảo tổng thể hashCode()
cung cấp phân phối công bằng.
Bạn có thể tham khảo mục 9 Java Effective
đề cập đến nó.
Đây là một bài viết chi tiết cách.