Nếu bạn cần tạo một từ điển trong chương trình Java, cách hợp lý nhất để giải quyết vấn đề này là sử dụng cấu trúc dữ liệu từ điển. Cấu trúc dữ liệu này cho phép bạn lưu trữ thông tin dưới dạng "key - value". Java có một lớp Dictionary đặc biệt cũng như lớp con của nó, Hashtable . Ngoài ra còn có giao diện Bản đồ và lớp HashMap , lớp này cũng lưu trữ các cặp “khóa - giá trị”. Vì vậy, có nhiều cách để tạo một từ điển Java.

Cấu trúc dữ liệu từ điển

Vì vậy, cấu trúc dữ liệu Từ điển lưu trữ thông tin dưới dạng kết hợp khóa-giá trị. Đó là, với bất kỳ giá trị nào, chúng tôi liên kết một khóa (ví dụ: id) và nhập cặp này vào từ điển. Việc đánh địa chỉ một phần tử của từ điển, xóa, tìm kiếm trong từ điển được thực hiện bởi phím. Có vẻ thuận tiện để tổ chức bằng cách sử dụng cấu trúc dữ liệu như vậy, chẳng hạn như danh bạ điện thoại, trong đó tên (khóa) tương ứng với số điện thoại (giá trị).

Lớp từ điển và phần mở rộng của nó

Để bắt đầu, java.util.Dictionary <K, V> util.Dictionary là một lớp trừu tượng. Nó đại diện cho mối quan hệ khóa-giá trị và hoạt động tương tự như bản đồ. Đưa ra một khóa, bạn có thể lưu trữ các giá trị và khi cần có thể lấy lại giá trị bằng khóa của nó. Vì vậy, nó là một danh sách các cặp khóa-giá trị.

public abstract class Dictionary<K,V> extends Object
Vì lớp này trừu tượng nên chúng ta sẽ không làm việc trực tiếp với nó. Từ điển có một lớp con trực tiếp Hashtable . Vì vậy, để tạo từ điển trong Java, bạn có thể sử dụng Hashtable . Lớp này thực hiện một bảng băm, ánh xạ các khóa thành các giá trị và bất kỳ đối tượng không null nào cũng có thể được sử dụng làm khóa hoặc làm giá trị. Trong hệ thống phân cấp Java, Hashtable mở rộng Từ điển và triển khai Bản đồ . Hãy đưa ra một ví dụ. Chúng tôi sẽ tạo một từ điển cổ điển, một danh bạ điện thoại, dựa trên Hashtable .

Dictionary phoneBook = new Hashtable();
Nếu viết theo cách này, chúng ta nên áp dụng ép kiểu cho một số thao tác. Ví dụ, để trích xuất khóa.

System.out.println(((Hashtable) phoneBook).keySet());
Để tránh điều này, chúng ta có thể thay đổi

Dictionary phoneBook = new Hashtable ();
trên

Hashtable phoneBook = new Hashtable ();
Trong ví dụ của chúng tôi, để rõ ràng, chúng tôi sẽ để lại tùy chọn đầu tiên.

import java.util.Dictionary;
import java.util.Hashtable;

public class DictionaryDemo {

       public static void main(String[] args) {

           Dictionary phoneBook = new Hashtable();

           // put() method
           phoneBook.put("Johnny Walker", "2178");
           phoneBook.put("Andrew Arnold", "1298");
           phoneBook.put("Ivy Briggs", "1877");
           phoneBook.put("Ricky McBright", "2001");

           //print out Hashtable out
           System.out.println(phoneBook);

           //let's get the value using the key
           System.out.println(phoneBook.get("Ivy Briggs"));
           //there's no such key in out Hashtable
           System.out.println(phoneBook.get("Sol Frank"));

           //Is there a record with the "Johnny Walker" key?
           System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
           //all keys of the Hashtable
           System.out.println(((Hashtable) phoneBook).keySet());
           //values from Hashtable
           System.out.println(((Hashtable) phoneBook).values());

           //the quantity of records
           System.out.println(phoneBook.size());
           //removing one record
           phoneBook.remove("Andrew Arnold");
           System.out.println(phoneBook);
       }
   }
Đầu ra là:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null true [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178, Ricky McBright=2001, Ivy Briggs=1877}

HashMap như một cuốn từ điển

HashMap , không giống như Hashtable , không phải là hậu duệ trực tiếp của Dictionary . Tuy nhiên, do có nhiều tính năng nên trong hầu hết các trường hợp, tốt hơn hết là tạo từ điển bằng HashMap . Lớp HashMap có chức năng rất giống với Hashtable . Sự khác biệt chính là các phương thức của Hashtable được đồng bộ hóa, nhưng HashMap thì không. Đồng bộ hóa trong Hashtable làm giảm hiệu suất của mã. Ngoài ra, lớp HashMap , không giống như Hashtable, cho phép sử dụng null làm khóa (một) và một tập hợp null làm giá trị. Trong trường hợp của chúng tôi, chương trình sẽ giống hệt như ví dụ trên. Sự khác biệt duy nhất là trong loại bộ sưu tập. Tuy nhiên, đây là cách ưu tiên để làm việc với từ điển trong Java trong hầu hết các trường hợp.

import java.util.HashMap;
import java.util.Map;

public class DictionaryDemo2 {

   public static void main(String[] args) {

       Map<String, String> phoneBook = new HashMap<String,String>();
      
       phoneBook.put("Johnny Walker", "2178");
       phoneBook.put("Andrew Arnold", "1298");
       phoneBook.put("Ivy Briggs", "1877");
       phoneBook.put("Ricky McBright", "2001");
      
       System.out.println(phoneBook);
      
       System.out.println(phoneBook.get("Johnny Walker"));
       System.out.println(phoneBook.get("Ivy Briggs"));
       System.out.println(phoneBook.get("Unknown Friend"));
      
       System.out.println(phoneBook.containsKey("Johnny Walker"));
       System.out.println(phoneBook.containsKey("Unknown Friend"));

       System.out.println(phoneBook.keySet());
       System.out.println(phoneBook.values());

       System.out.println(phoneBook.size());

       phoneBook.remove("Andrew Arnold");

       System.out.println(phoneBook);
   }

}
Đây là đầu ra:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null true false [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}