Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa HashMap và LinkedHashMap trong Java

HashMap và LinkedHashMap là các lớp, khá giống nhau và được sử dụng để tạo bản đồ. Lớp HashMap mở rộng lớp AbstractMap để sử dụng bảng băm để lưu trữ các phần tử trong bản đồ. Lớp LinkedHashMap duy trì các mục trong bản đồ dựa trên thứ tự chèn của chúng. Tính năng phân biệt HashMap và LinkedHashMap với nhau là Hashmap không duy trì thứ tự của các mục được lưu trữ trong bản đồ. Mặt khác, LinkedHashMap sử dụng cấu trúc dữ liệu lai để duy trì thứ tự các mục mà chúng được chèn vào. Trong Biểu đồ so sánh bên dưới, tôi đã khám phá một số khác biệt khác giữa HashMap và LinkedHashMap chỉ cần xem qua.

Biểu đồ so sánh

Cơ sở để so sánhBản đồ bămLinkedHashMap
Căn bảnThứ 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ệuHashMap 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 khaiHashMap mở rộng AbstractMap và thực hiện giao diện Bản đồ.LinkedHashMap mở rộng Hashmap.
Phiên bảnHashMap đã được giới thiệu trong JDK 2.0.LinkedHashMap đã được giới thiệu trong JDK 4.0.
Trên khôngTươ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áchbả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

  1. 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 .
  2. 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ếtHashtable .
  3. 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.
  4. 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 .
  5. 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 đồ.

Top