The Jon Skeet answer địa chỉ cũng hai kịch bản (bản đồ có giá trị null
và không null
giá trị) một cách hiệu quả.
Giới thiệu về các mục nhập số và mối quan tâm hiệu quả, tôi muốn thêm thứ gì đó.
Tôi có HashMap với mục nhập 1.000 mục và tôi đang xem xét cải thiện hiệu suất . Nếu HashMap được truy cập rất thường xuyên, thì kiểm tra sự tồn tại quan trọng ở mọi quyền truy cập sẽ dẫn đến chi phí lớn.
Bản đồ có 1.000 mục nhập không phải là một bản đồ lớn.
Cũng như bản đồ có 5.000 hoặc 10.000 mục nhập.
Map
được thiết kế để thực hiện truy xuất nhanh với các thứ nguyên như vậy.
Bây giờ, giả định rằng hashCode()
của các khóa bản đồ cung cấp phân phối tốt.
Nếu bạn có thể sử dụng Integer
làm loại khóa, hãy thực hiện.
phương pháp hashCode()
của nó là rất hiệu quả kể từ khi va chạm là không thể cho int
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 vì chìa khóa, bạn phải sử dụng một built-in loại như String
ví dụ thường được sử dụng trong 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à phương pháp String.hashCode()
cung cấp phân phối tốt.
Nếu bạn sử dụng loại tùy chỉnh, hãy ghi đè hashCode()
và equals()
một cách chính xác và đảm bảo tổng thể rằng hashCode()
cung cấp phân phối hợp lý.
Bạn có thể tham khảo mục 9 của Java Effective
đề cập đến nó.
Dưới đây là một số post chi tiết cách đó.
"do đó và ngoại lệ xảy ra" - ngoại lệ là gì? Điều này sẽ không phải từ java.util.HashMap ... – serg10