Biểu đồ so sánh
Cơ sở để so sánh | Bản đồ băm | LinkedHashMap |
---|---|---|
Căn bản | Thứ tự chèn trong HashMap không được bảo tồn. | Thứ tự chèn được bảo toàn trong LinkedHashMap. |
Cấu trúc dữ liệu | HashMap sử dụng HashTable để lưu trữ bản đồ. | LinkedHashMap sử dụng HashTable cùng với Danh sách được liên kết để lưu trữ bản đồ. |
Mở rộng / triển khai | HashMap mở rộng AbstractMap và thực hiện giao diện Bản đồ. | LinkedHashMap mở rộng Hashmap. |
Phiên bản | HashMap đã được giới thiệu trong JDK 2.0. | LinkedHashMap đã được giới thiệu trong JDK 4.0. |
Trên không | Tương đối ít chi phí. | Chi phí tương đối nhiều hơn vì nó phải duy trì thứ tự của các mục bản đồ. |
Định nghĩa của HashMap
HashMap là một lớp được sử dụng để tạo bản đồ. Nó thực hiện Giao diện bản đồ . Nó cũng mở rộng lớp AbstractMap để có thể sử dụng bảng băm để lưu trữ các mục trong bản đồ. Các mục nhập của bản đồ là một cặp trong đó mỗi khóa được liên kết với giá trị. Khóa trong mục nhập được sử dụng để truy xuất giá trị do đó, khóa phải là duy nhất. Đó là lý do tại sao các khóa trùng lặp không được phép trong HashMap. Nhưng khóa trong mỗi mục trên bản đồ có thể có loại khác nhau, tức là các khóa trong bản đồ được tạo bởi HashMap có thể không đồng nhất. Cấu trúc dữ liệu được HashMap sử dụng để lưu trữ bản đồ là bảng băm.
Thứ tự chèn của các mục trong HashMap không được giữ nguyên. Việc chèn các mục trong bản đồ được tạo bằng HashMap dựa trên mã băm được tính bởi các khóa trong các mục. Nếu do nhầm lẫn, bạn đã nhập một khóa trùng lặp trong HashMap, nó sẽ thay thế giá trị trước đó của khóa đó bằng giá trị mới được đề xuất và sẽ trả về giá trị cũ. Nếu không có khóa trùng lặp được sử dụng và không có sự thay thế nào xảy ra, khóa luôn trả về Null. Hãy cho chúng tôi xem làm thế nào để thêm các mục vào bản đồ băm với ví dụ sau.
Hashmap hm = Hashmap mới (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.println (hm); / * đầu ra * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}
Như trong đoạn mã trên, bạn có thể thấy tôi đã tạo một đối tượng của HashMap và thêm các mục nhập bằng phương thức put và khi tôi in đối tượng HashMap, các mục nhập không được in theo thứ tự chúng được chèn. Do đó, bạn không thể giả vờ thứ tự của các mục trong HashMap sẽ trả về. HashMap sử dụng tất cả các phương thức của giao diện Map và lớp AbstractMap và không giới thiệu bất kỳ phương thức mới nào; nó có các nhà xây dựng riêng của nó. Dung lượng mặc định của bản đồ băm là 16 và tỷ lệ lấp đầy mặc định là 0, 75 .
Định nghĩa của LinkedHashMap
LinkedHashMap cũng là một lớp sử dụng để tạo bản đồ. LinkedHashMap mở rộng lớp HashMap và sau đó được giới thiệu với HashMap trong phiên bản JDK 4.0. Là lớp con của lớp HashMap LinkedHashMap hoàn toàn giống với lớp HashMap bao gồm các hàm tạo và phương thức. Nhưng, LinkedHashMap khác nhau theo nghĩa là nó duy trì thứ tự chèn các mục trong bản đồ. Cấu trúc dữ liệu được LinkedHashMap sử dụng để lưu trữ bản đồ được liên kết danh sách và bảng băm .
Ngoài các phương thức được HashMap kế thừa, LinkedHashMap còn giới thiệu một phương thức mới đó là removeEldestEntry () . Phương pháp này được sử dụng để loại bỏ mục cũ nhất trong bản đồ. Dung lượng mặc định của LinkedHashMap là 16 và tỷ lệ lấp đầy mặc định là 0, 75 cũng tương tự như lớp HashMap.
Sự khác biệt chính giữa HashMap và LinkedHashMap trong Java
- Sự khác biệt quan trọng nhất là thứ tự chèn của HashMap không được giữ nguyên trong khi đó, thứ tự chèn của LinkedHashMap vẫn được giữ nguyên .
- Cấu trúc dữ liệu được HashMap sử dụng để lưu trữ các yếu tố của bản đồ là Hashtable . Mặt khác, cấu trúc dữ liệu được sử dụng bởi LinkedHashMap là danh sách Liên kết và Hashtable .
- Lớp HashMap mở rộng lớp AbstractMap và thực hiện giao diện Map . Tuy nhiên, lớp LinkedHashMap là một lớp con của lớp HashMap, tức là lớp LinkedHashMap mở rộng lớp HashMap.
- Lớp HashMap được giới thiệu trong phiên bản JDK 2.0 . Lớp LinkedHashMap được giới thiệu sau trong phiên bản JDK 4.0 .
- Lớp LinkedHashMap so sánh có nhiều chi phí hơn HashMap vì nó phải duy trì thứ tự của các phần tử được chèn trong bản đồ.
Phần kết luận:
LinkedHashMap chỉ được sử dụng khi chúng tôi lo ngại về chuỗi các yếu tố được chèn trong bản đồ.