Điều đầu tiên bạn cần biết là HashSethoạ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 HashSetvà 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, HashMaplà một Maploạ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 HashMapbạ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 HashMapmụ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, HashMapkhông thể có các khóa trùng lặp. Phía sau hiện trường HashSetsử 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 HashMapcầ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 HashMapnằm bên dưới. Tuy nhiên, HashMapkhông hỗ trợ trùng lặp. Do đó, HashSetvẫ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:
HashMapcho phép trùng lặp values, nhưng không keys.
HashSetkhô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 booleangiá trị được trả về khi bạn gọi .add() và xem liệu nó có trả về truehay không false. Nếu nó trở lại true, nó đã được chèn vào.
HashMapđể xemkeycó tồn tại trước khi gọiputvào mặt saumapkhông?