Các phương pháp sử dụng lớp từ điển Java hiệu quả

Việc lưu trữ và thu thập dữ liệu là một trong những công việc quan trọng. Và cần thiết đối với mỗi ứng dụng phần mềm. Do đó mà hiện nay nhiều ngôn ngữ lập trình cung cấp các lớp tích hợp để lưu trữ các thành phần này. Đặc biệt trong Java cũng chứa một vài lớp dùng để lưu trữ dữ liệu dưới dạng một tập hợp. Các lớp này sẽ bao gồm: mảng, danh sách và từ điển. Do vậy Box.edu sẽ giới thiệu cho các bạn hiểu rõ hơn về lớp từ điển Java nhé!

Mục lục bài viết

Tổng quan về lớp từ điển Java

tong-quan-ve-lop-tu-dien-java.jpg

Tổng quan về lớp từ điển Java

Lớp từ điển Java là gì?

Lớp từ điển Java được biết đến là một lớp trừu tượng. Nó cho phép tất cả các lớp dẫn xuất của nó được lưu trữ dữ liệu dưới dạng các cặp khóa – giá trị. Cả khóa và giá trị trên đều có thể là đối tượng thuộc bất kỳ loại nào, nhưng các khóa này phải là duy nhất.

Ngoài ra, cả khóa và giá trị đều không được rỗng. Ví dụ như: nếu một khóa hoặc giá trị tham chiếu đến null và sau đó được chèn vào từ điển, lỗi NullPointerException sẽ xảy ra. Do vậy mà bắt buộc phải cung cấp các giá trị rỗng để lưu trữ cả khóa và giá trị.

Cách thức triển khai của lớp từ điển Java

Lớp từ điển Java này hiện đã trở nên lỗi thời. Và hầu hết tất cả các kiểu thu thập lưu trữ dữ liệu dưới dạng các cặp khóa – giá trị đều thực hiện giao diện Bản đồ Java. Tuy nhiên, các biến lớp của từ điển Java vẫn có thể được sử dụng để lưu trữ một tham chiếu đến với các lớp Hashtable thực hiện giao diện Bản đồ. Có ba lớp chính thực hiện giao diện trên Bản đồ và lưu trữ dữ liệu dưới dạng cặp khóa – giá trị đó là:

  • Hashtable
  • Bản đồ băm
  • LinkedHashMap

Ví dụ về lớp từ điển Java

Chúng tôi sẽ đưa ra một vài ví dụ minh hoạ cụ thể. Để giúp các bạn có thể hiểu rõ hơn về các lớp Hashtable, HashMap và LinkedHashMap. Được lưu trữ các giá trị dưới dạng các cặp khóa – giá trị tương tự như một bộ sưu tập từ điển. Đối tượng Hashtable thường được lưu trữ trong biến kiểu từ điển vì nó kế thừa trực tiếp qua từ điển.

Tuy nhiên trên thực tế thì lớp từ điển đã không được chấp nhận trong lập trình Java. Và giờ đây các bộ sưu tập lưu trữ dữ liệu dưới dạng cặp khóa – giá trị thực hiện giao diện bản đồ mới. Do đó, các đối tượng HashMap và LinkedHashMap sẽ được lưu trữ trong biến, đồng thời loại bản đồ sẽ được thấy rõ hơn trong các ví dụ dưới đây. Ví dụ đầu tiên minh họa việc triển khai Hashtable của lớp Dictionary. Đoạn mã được minh họa như sau:

Dictionary  cities = new Hashtable();
cities.put("New York", "USA");
cities.put("Toronto", "Canada");
cities.put("Manchester", "UK");
cities.put("Berlin", "Germany");
for (Enumeration city = cities.keys(); city.hasMoreElements();) {
String key = (String)city.nextElement();
System.out.println("Key: "+key +" Value: " + cities.get(key)); }

Ở ví dụ trên, một biến kiểu từ điển, các thành phố được đặt tên đã được khởi tạo bằng cách lưu trữ một đối tượng kiểu Hashtable trong đó. Để có thể lưu trữ dữ liệu vào Hashtable, thì phương pháp “put” sẽ được sử dụng. Phương thức này đồng thời được nhận hai tham số. Tham số đầu tiên là khóa có thể thuộc bất kỳ loại nào và tham số thứ hai chính là giá trị được liên kết với khóa. Giá trị này cũng có thể thuộc bất kỳ loại nào.

Một điểm lưu ý đó là trong ví dụ trên thì các khóa tham chiếu đến tên của các thành phố và các giá trị tương ứng là quốc gia mà các thành phố này hiện diện. Nếu một khóa “Newyork” được chèn thêm một lần nữa vào bảng ở ví dụ trên, như vậy sẽ không có lỗi nào được tạo ra. Tuy nhiên, nếu tập hợp các thành phố được duyệt qua, khóa “New York” sẽ chỉ xuất hiện một lần, có nghĩa là các khóa lặp lại sẽ bị bảng trên bỏ qua.

Để có thể thực hiện lấy tất cả khóa và phương thức khóa được gọi là phiên bản Hashtable trả về các khóa ở dạng liệt kê. Tiếp theo, phương thức nextElement có thể được gọi trên kiểu liệt kê trả về, phương thức này sẽ trả về kết quả true cho đến khi tất cả các phần tử trong kiểu liệt kê đã được duyệt qua.

Nếu muốn nhận giá trị được liên kết với mỗi khóa, thì một phương thức get được gọi trên phiên bản của Hashtable và khóa được truyền dưới dạng tham số cho phương thức get đó. Kết quả cuối cùng sẽ trả về giá trị được liên kết với khóa được chỉ định. Đầu ra của mã nói trên sẽ là:

  • Chìa khóa: Giá trị Manchester: Vương quốc Anh
  • Chìa khóa: Giá trị Newyork: Hoa Kỳ
  • Chìa khóa: Giá trị Toronto: Canada
  • Chìa khóa: Berlin Giá trị: Đức

Bản đồ lớp từ điển Java HanshMap

ban-do-lop-tu-dien-java-hansdmap.jpg

Bản đồ lớp từ điển Java HanshMap

HashMap có chức năng tương tự như Hashtable vì cả hai đều lưu trữ các bộ sưu tập dữ liệu dưới dạng các cặp khóa – giá trị. Điểm khác biệt giữa HashMap và bộ sưu tập Hashtable là Hashtable sẽ triển khai cả giao diện từ điển và bản đồ. Lớp HashMap chỉ thực hiện giao diện bản đồ và không kế thừa trực tiếp từ lớp từ điển. Bạn tham khảo ví dụ dưới đây:

Map  cities = new HashMap();
cities.put("Newyork", "USA");
cities.put("Toronto", "Canada");
cities.put("Manchester", "UK");
cities.put("Berlin", "Germany");
Set citykeys = cities.keySet();
for (Iterator city = citykeys.iterator(); city.hasNext();) {
String key = (String)city.next();
System.out.println("Key: "+key +" Value: "+cities.get(key));
}

Trong đoạn mã trên, lớp HashMap được khởi tạo và tham chiếu của đối tượng được lưu trữ trong biến loại bản đồ có tên là các thành phố. Quá trình chèn các phần tử trong HashMap cũng tương tự như Hashtable sử dụng phương thức put. Tuy nhiên, quá trình duyệt các phím có sự khác biệt.

Không giống như Hashtable trong đó phương thức các khóa trả về một bảng liệt kê. Chứa tất cả các khóa trong một tập hợp cụ thể. HashMap sử dụng phương thức keyet () để trả về một tập hợp. Sau đó, Iterator có thể được sử dụng để duyệt qua Set này bằng cách gọi phương thức hasNext trên Iterator. Để lấy khóa tiếp theo trong bộ khóa thì bạn có thể sử dụng Iterator. Khi đó giá trị trả về được phân tích cú pháp thành kiểu dữ liệu chuối và hiển thị dưới dạng đầu ra trên bảng điều khiển.

Để lấy các phần tử được liên kết với một khóa cụ thể, phương thức get có thể được sử dụng. Giống như Hashtable, phương thức này chấp nhận một khóa làm tham số và trả về một giá trị được liên kết với khóa đó. Đầu ra của đoạn mã trên cũng sẽ tương tự như ví dụ Hashtable.

Các phương pháp của lớp từ điển

Phương pháp Sự miêu tả
Liệt kê trừu tượng và công khai phần tử () Nó sẽ trả về một bảng liệt kê các giá trị trong từ điển này. Đối tượng enum được trả về tạo ra các phần tử nằm trong mục từ điển này
Khóa đối tượng Trả về giá trị mà khóa được ánh xạ trong từ điển này. Nó phân tích cú pháp một đối tượng (khóa) trong từ điển. Lưu ý rằng nếu từ điển này chứa một mục nhập cho khóa được chỉ định. Thì giá trị được liên kết sẽ được trả về, còn nếu không, null sẽ được trả về. Đồng thời nó ném NullPointerException nếu khóa rỗng
Public trừu tượng boolean is empty () Phương pháp này sẽ kiểm tra xem từ điển này có ánh xạ không. Và có khóa giá trị hay không. Kết quả là true nếu từ điển này không chứa mục nhập nào, còn lại sẽ trả về false
Liệt kê trừu tượng, công khai các phím () Nó trả về một enum của các khóa trong từ điển. Đối tượng enum được trả về tạo ra các khóa mà từ điển này chứa các mục nhập
Công khai trừu tượng V  (khóa K và giá trị V)
  • Phương thức này được dùng để chèn cặp khóa – giá trị trong từ điển. Nó ánh xạ khóa đến giá trị được chỉ định trong từ điển. Và cả khóa, giá trị đều không được rỗng
  • Nếu từ điển đã chứa một mục nhập cho khóa được chỉ định. Thì giá trị đã có trong từ điển này cho khóa đó sẽ được trả về. Sau khi sửa đổi mục nhập để chứa phần tử mới
  • Còn nếu từ điển chưa có mục nhập cho khóa được chỉ định. Thì mục nhập sẽ được tạo cho khóa và giá trị đã chỉ định và trả về giá trị null.
  • Nó phân tích khóa và giá trị dưới dạng một tham số. Và ném NullPointerException nếu khóa hoặc giá trị là rỗng.
Public abstract V remove  Phương thức này để phân tích cú pháp khóa mà bạn muốn xóa. Nó loại bỏ khóa và giá trị liên quan. Lưu ý phương pháp này không có tác dụng nếu khóa không có trong từ điển
Public abstract int size () Nó sẽ trả về số lượng mục nhập trong lớp từ điển Java này

Tổng kết

Mong rằng các bạn đã nắm được khái niệm lớp từ điển Java một cách chính xác. Hiểu được được đặc điểm, phương pháp thực hiện của lớp từ điển này. Để từ đó có thể áp dụng cho nhiều ngôn ngữ khác trong lập trình.

5/5 - (20 bình chọn)
Xin chào các bạn! Mình là Hà Nguyên Phương Hiện đang là tác giả của Box.edu.vn website nổi tiếng chuyên review, đánh giá, giới thiệu các khóa học hay nhất hiện nay.