Điều đầu tiên bạn cần biết là HashSet
hoạt động như một Set
, có nghĩa là bạn thêm đối tượng của mình trực tiếp vào HashSet
và nó không thể chứa các bản sao. Bạn chỉ cần thêm giá trị của bạn trực tiếp vào HashSet
.
Tuy nhiên, HashMap
là một Map
loại. Điều đó có nghĩa là mỗi khi bạn thêm một mục, bạn thêm một cặp khóa-giá trị.
Trong HashMap
bạn có thể có các giá trị trùng lặp, nhưng không trùng lặp các khóa. Trong HashMap
mục mới sẽ thay thế cái cũ. Các mục gần đây nhất sẽ được trong HashMap
.
Hiểu liên kết giữa HashMap và Hashset:
Hãy nhớ rằng, HashMap
không thể có các khóa trùng lặp. Phía sau hiện trường HashSet
sử dụng a HashMap
.
Khi bạn cố gắng thêm bất kỳ đối tượng nào vào một HashSet
, mục nhập này thực sự được lưu trữ dưới dạng một khóa trong HashMap
- tương tự HashMap
được sử dụng đằng sau cảnh HashSet
. Vì cơ sở này HashMap
cần một cặp giá trị khóa, nên một giá trị giả được tạo cho chúng tôi.
Bây giờ khi bạn cố gắng chèn một đối tượng trùng lặp khác vào cùng HashSet
, nó sẽ lại cố gắng chèn nó làm chìa khóa HashMap
nằm bên dưới. Tuy nhiên, HashMap
không hỗ trợ trùng lặp. Do đó, HashSet
vẫn sẽ dẫn đến chỉ có một giá trị của loại đó. Như một lưu ý phụ, đối với mọi khóa trùng lặp, vì giá trị được tạo cho mục nhập của chúng tôi trong Hashset là một số giá trị ngẫu nhiên / giả, khóa này hoàn toàn không được thay thế. nó sẽ bị bỏ qua khi loại bỏ khóa và thêm lại cùng một khóa (giá trị giả là như nhau) sẽ không có ý nghĩa gì cả.
Tóm lược:
HashMap
cho phép trùng lặp values
, nhưng không keys
.
HashSet
không thể chứa các bản sao.
Để biết liệu việc bổ sung đối tượng có hoàn thành thành công hay không, bạn có thể kiểm tra boolean
giá trị được trả về khi bạn gọi .add()
và xem liệu nó có trả về true
hay không false
. Nếu nó trở lại true
, nó đã được chèn vào.
HashMap
để xemkey
có tồn tại trước khi gọiput
vào mặt saumap
không?