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

Tác Giả: Laura McKinney
Ngày Sáng TạO: 2 Tháng Tư 2021
CậP NhậT Ngày Tháng: 5 Có Thể 2024
Anonim
Sự khác biệt giữa HashMap và Hashtable trong Java - Công Nghệ
Sự khác biệt giữa HashMap và Hashtable trong Java - Công Nghệ

NộI Dung


Cả HashMap và Hashtable, cả hai đều được sử dụng để đại diện cho một nhóm đối tượng được thể hiện trong đôi. Mỗi cặp được gọi là Nhập cảnh vật. Các bộ sưu tập của Entries được tham chiếu bởi đối tượng của HashMap và Hashtable. Các khóa trong một bộ sưu tập phải là duy nhất hoặc đặc biệt. Sự khác biệt giữa HashMap và Hashtable là Bản đồ băm đặc biệt thực hiện giao diện Bản đồ trong khi, Hashtable mở rộng lớp Từ điển (lớp kế thừa) được tổ chức lại để thực hiện giao diện Bản đồ. Sự khác biệt quan trọng khác là các đối tượng của HashMap là không đồng bộ trong khi đó, các đối tượng của Hashtable là đồng bộ hóa.

Hãy để xem chế độ xem biểu đồ so sánh bên dưới để tìm hiểu thêm một số khác biệt giữa HashMap và Hashtable.


  1. Biểu đồ so sánh
  2. Định nghĩa
  3. Sự khác biệt chính
  4. Điểm tương đồng
  5. Phần kết luận

Biểu đồ so sánh

Cơ sở để so sánhBản đồ bămHashtable
Thực hiện / Mở rộngLớp HashMap thực hiện giao diện Map và mở rộng một lớp AbstractMap.Hashtable mở rộng lớp Dictionary Legacy nhưng, nó được thiết kế lại và bây giờ nó cũng thực hiện giao diện Map.
Đồng bộ hóaHashMap không được đồng bộ hóa và do đó, đối tượng HashMap không được xâu chuỗi an toàn.Hashtable được đồng bộ hóa và do đó, đối tượng của Hashtable là luồng an toàn.
Khóa / Giá trịMột khóa có thể trả về Null chỉ một lần, nhưng một giá trị có thể trả về Null bất kỳ số lượng thời gian nào.Khóa không thể trả về Null vì nó được sử dụng để lấy mã băm sẽ được sử dụng làm chỉ mục của bảng băm, và giá trị không thể trả về Null.
Công suất ban đầu mặc địnhDung lượng ban đầu mặc định của HashMap là 16.Dung lượng ban đầu mặc định của Hashtable là 11.
Đi quaHashMap được duyệt qua Iterator.Giống như lớp Map, Hashtable cũng không hỗ trợ trực tiếp Iterator để duyệt qua và do đó, nó sử dụng Enumerator.


Định nghĩa của HashMap

HashMap là một lớp thực hiện Bản đồ giao diện và mở rộng Tóm tắt lớp sử dụng bảng băm. Đối tượng HashMap, đề cập đến một bộ sưu tập / bộ cặp trong đó mỗi khóa được ánh xạ tới một giá trị cụ thể. Các khóa trong bộ sưu tập phải là duy nhất vì chúng được sử dụng để truy xuất giá trị. Mặt khác, các giá trị trong một bộ sưu tập có thể được nhân đôi. Khai báo của lớp HashMap và các hàm tạo của HashMap class như sau:

/ * K đại diện cho khóa và V đại diện cho giá trị * / class HashMap / * Trình xây dựng của lớp HashMap * / HashMap () HashMap (Bản đồ <? Extends K ,? Extends V> m) HashMap (int dung) HashMap (int dung lượng, float fillRatio)

Hàm tạo đầu tiên là hàm tạo mặc định khởi tạo một đối tượng rỗng của HashMap với dung lượng mặc định là 16 và tỷ lệ lấp đầy mặc định là 0,75. Hàm tạo thứ hai khởi tạo bản đồ băm với giá trị là m. Hàm tạo thứ ba tạo ra một bản đồ băm với dung lượng ban đầu tương ứng với giá trị được cung cấp trong đối số. Hàm tạo thứ tư khởi tạo bản đồ băm với dung lượng và tỷ lệ lấp đầy được cung cấp trong các tham số. Bây giờ chúng ta hãy tìm hiểu làm thế nào để cung cấp các mục trong bản đồ băm.

Hashmap hm = Hashmap mới (); hm.put ("Ajay", 275); hm.put ("Vijay", 250); hm.put ("Jonny", 150); hm.put ("Jordan", 200); System.out.ln (hm); / * đầu ra * / {Vijay = 250, Jonny = 150, Ajay = 275, Jordan = 200}

Trong đoạn mã trên, bạn có thể thấy rằng tôi đã tạo một đối tượng HashMap trống hm với công suất ban đầu mặc định và tỷ lệ lấp đầy mặc định. Sau đó, tôi chèn bốn mục trong bản đồ băm bằng phương thức put (K, V) ánh xạ khóa tới giá trị. Bạn có thể quan sát rằng các mục không phải là ed trong một chuỗi bạn cho chúng ăn vì thứ tự chèn không cố định. Bây giờ, hãy xem xét một trường hợp mà bạn đã có một mục trong bản đồ băm và sau đó bạn cố gắng chèn put (K1, V5), tức là bạn cố gắng ánh xạ cùng một khóa với một giá trị khác. Sau đó, phương thức put sẽ thay thế giá trị cũ V1 bằng giá trị mới V2 và trả về giá trị cũV1, nếu không, nếu chúng ta không bao giờ cố gắng thay thế một giá trị khóa, sau đó đặt phương thức trả về Null cho khóa đó.

Định nghĩa của Hashtable

Hashtable là một lớp mở rộng Từ điển lớp là một lớp kế thừa và được tổ chức lại để thực hiện Bản đồ giao diện. Hashtable sử dụng bảng băm làm cấu trúc dữ liệu của nó. Hashtable tương tự như HashMap vì ở đây cũng là đối tượng của Hashtable đề cập đến bộ sưu tập các mục trong đó mỗi mục là một cặp . Mặt khác, tất cả các khóa trong bộ sưu tập phải là duy nhất, các giá trị có thể được nhân đôi. Các khóa được sử dụng đặc biệt để lấy giá trị mã băm quyết định chỉ mục, trong đó cặp sẽ được lưu trữ trong một bảng băm. Trong bảng băm, cả khóa và giá trị đều không thể trả về con trỏ Null. Chúng ta hãy xem khai báo của lớp Hashtable và các hàm tạo của lớp hashtable.

/ * K chỉ định khóa và V chỉ định giá trị được liên kết với khóa * / class Hashtable / * constructor của Hashtable * / Hashtable () Hashtable (int size) Hashtable (int size, float fillRatio) Hashtable (Map <? extends K ,? extends V> m)

Trong đoạn mã trên, hàm tạo đầu tiên là hàm tạo mặc định tạo một đối tượng trống của lớp Hashtable, kích thước mặc định của nó là 11 và tỷ lệ điền mặc định là 0,75. Hàm tạo thứ hai tạo một bảng băm với kích thước tương ứng với giá trị được cung cấp trong tham số Kích thước kích thước. Hàm tạo thứ ba tạo một bảng băm với kích thước và tỷ lệ lấp đầy được cung cấp trong tham số. Hàm dựng thứ tư khởi tạo bảng băm với giá trị m. Bây giờ chúng ta hãy tìm hiểu làm thế nào để chèn cặp trong bảng băm.

Hashtable ht = new Hashtable (); ht.put (mã băm mới (2), 275); ht.put (mã băm mới (12), 250); ht.put (mã băm mới (16), 150); ht.put (mã băm mới (8), 200); System.out.ln (ht); / * đầu ra * / {12 = 250, 16 = 150,2y = 275, 8 = 200}

Trong đoạn mã trên, tôi đã tạo một đối tượng rỗng của Hashtable và chèn bốn mục nhập bằng phương thức put (). Phương thức put bên trong tôi gọi là hashCode () để tính toán và trả về giá trị mã băm sẽ đóng vai trò là giá trị chỉ mục cho đối tượng mục nhập. Như bạn có thể thấy tôi đã đề cập đến kích thước của bảng băm nên theo mặc định nó sẽ là 11. Ở đây, thứ tự chèn không được giữ nguyên và do đó, khi các mục ed không xuất hiện theo trình tự, nó được cung cấp.

  1. HashMap thực hiện Bản đồ giao diện và mở rộng một lớp trừu tượng, Tóm tắt trong khi đó, Hashtable mở rộng lớp trừu tượng Từ điển, cũng là một lớp Legacy, sau đó được tổ chức lại để thực hiện Bản đồ giao diện.
  2. Đối tượng HashMap là không đồng bộ tức là nhiều luồng có thể hoạt động cùng lúc và do đó, các đối tượng không phải là luồng an toàn. Mặt khác, các đối tượng của Hashtable là đồng bộ hóa tức là nếu một luồng muốn hoạt động trên một đối tượng của Hashtable thì nó phải có được một khóa trên đối tượng đó để không có luồng nào khác có thể truy cập vào đối tượng đó và do đó, đó là luồng an toàn.
  3. Trong khóa HashMap có thể trả về Không chỉ một lầnvà giá trị có thể trả về Không nhiều lần. Mặt khác, một khóa không bao giờ có thể trả về Null vì nó được sử dụng để lấy giá trị mã băm được sử dụng làm chỉ mục để lưu trữ cặp và cũng không thể trả về giá trị Null.
  4. Dung lượng mặc định của bảng băm trong lớp HashMap là 16 trong khi đó, dung lượng mặc định của bảng băm trong Hashtable là 11.
  5. Các Lặp lại có thể đi qua các mục Hashmap. Mặt khác, Hashtable không hỗ trợ trực tiếp Iterator và do đó, nói chung, ĐTVN được sử dụng để duyệt qua các mục trong Hashtable.

Điểm tương đồng:

  • HashMap và Hashtable đều sử dụng cấu trúc dữ liệu của bảng băm.
  • HashMap và Hashtable cả hai thực hiện Bản đồ giao diện
  • Thứ tự chèn không được bảo tồn trong cả HashMap và Hashtable và dựa trên mã băm thu được bằng cách sử dụng các khóa.
  • Trong HashMap và Hashtable, Khóa phải là độc nhất trong khi đó, các giá trị có thể là trùng lặp.
  • HashMap và Hashtable đều có thể chứa đối tượng không đồng nhất cho cả khóa và giá trị.
  • HashMap và Hashtable, cả hai đều thực hiện Nối tiếpCó thể nhân bản giao diện nhưng không, truy cập ngẫu nhiên.
  • HashMap và Hashtable đều có tỷ lệ lấp đầy mặc định 0.75.
  • HashMap và Hashtable đều tốt nhất để truy xuất hoặc đang tìm kiếm hoạt động.

Phần kết luận:

HashMap có hiệu suất tốt hơn vì các đối tượng của nó không được đồng bộ hóa và nhiều luồng có thể hoạt động trên nó cùng một lúc và do đó, nó nhanh hơn Hashtable.