Skip to main content

Java Hashtable class - Lớp Hashtable trong Java

Lớp Hashtable mở rộng lớp trừu tượng Dictionary, lớp này cũng được định nghĩa trong gói java.util. Hashtable được sử dụng để ánh xạ các khoá đến các giá trị. Ví dụ, nó có thể được sử dụng để ánh xạ các tên đến tuổi, những người lập trình đến những dự án, các tiêu đề công việc đến các lương, và cứ tiếp tục như vậy.

Packge: java.util

Hashtable mở rộng kích thước khi các phần tử được thêm vào. Khi đó việc tạo một bảng băm mới, bạn có thể chỉ định một dung lượng ban đầu và các yếu tố nạp vào. Điều này sẽ làm cho hashtable tăng kích thước lên, bất cứ lúc nào việc thêm vào một phần tử mới sẽ làm thay đổi giới hạn của hashtable cũ. Giới hạn của bảng băm là dung lượng được nhân lên bởi các yếu tố được nạp vào.

Ví dụ: một bảng băm với dung lượng 100, và một yếu tố nạp vào là 0.75 sẽ có một giới hạn là 75 mục.

Các phương thức xây dựng cho bảng băm được biểu diễn trong bảng sau:

STT Constructor Purpose
1 Hashtable(int) Xây dựng một bảng mới với dung lượng ban đầu được chỉ định.
2 Hashtable(int, float) Xây dựng một lớp mới với dung lượng ban đầu được chỉ định và yếu tố nạp vào.
3 Hashtable() Xây dựng một lớp mới bằng cách sử dụng giá trị mặc định cho dung lượng ban đầu và yếu tố nạp vào.

Hashtable hash1 = new Hashtable(500,0,80);

Trong trường hợp này, Bảng băm "hash1" sẽ lưu trữ 500 phần tử. Khi bảng băm lưu trữ vừa đầy 80% (một yếu tố nạp vào của .80), kích thước tối đa của nó sẽ được tăng lên.

Mỗi phần tử trong một hashtable bao gồm một khoá và một giá trị. Các phần tử được thêm vào bảng băm bằng cách sử dụng phương thức put(), và được truy lục bằng cách sử dụng phương thức get(). Các phần tử có thể được xoá từ một bảng băm với phương thức remove(). Các phương thức contains() và containsKey() có thể được sử dụng để tra cứu một giá trị hoặc một khoá trong bảng băm.

Một vài phương thức của Hashtable được tóm tắt trong bảng sau:

STT Method Desc
1

clear()

Xoá tất cả các phần tử từ bảng băm.
2

clone()

Tạo một bảng sao của Hashtable.
3

contains(Object)

Trả về True nếu bảng băm chứa các đối tượng được chỉ định.
4

containsKey(Object) 

Trả về True nếu bảng băm chứa khoá được chỉ định. 
5

elements()

Trả về một bảng liệt kê các yếu tố trong bảng băm. 
6

get(Object key)

Truy xuất phần tử với khoá được chỉ định.
7

isEmpty()

Trả về true nếu bảng băm trống.
8

keys()

Trả về một bảng liệt kê các khoá trong bảng băm. 
9

put(Object, Object)

Thêm một phần tử mới vào bảng băm bằng cách sử dụng khoá và giá trị được chỉ định.
10 rehash() 

Thay đổi bảng băm thành một bảng băm lớn hơn.

11 remove(Object key)  Xoá một đối tượng được cho bởi khoá được chỉ định. 
12 size() Trả về số phần tử trong bảng băm.
13 toString() Trả về đại diện chuỗi được định dạng cho bảng băm.

Chương trình sau sử dụng lớp Hashtable. Trong chương trình này, tên của các tập ảnh là các khoá, và các năm là các phần tử

  • contains được sử dụng để tra cứu phần tử nguyên 1969, để thấy có danh sách chứa bất kỳ các tập ảnh từ 1969.
  • containsKey được sử dụng để tìm kiếm cho khoá "Animals", để nhìn thấy nếu tập ảnh đó tạo nên danh sách.
  • get() được sử dụng để truy lục tập ảnh "Wish You Were Here" có trong bảng băm không. Phương thức get() trả về phần tử kết hợp với khoá, cả hai tên và năm được hiển thị tại điểm này.
import java.util. * ;
public class HashTableImplementer {
  public static void main(String args[]) {
    //tạo một bảng băm mới
    Hashtable ht = new Hashtable();
    //thêm các tập ảnh tốt nhất của Pink Floyd
    ht.put("Pulse", new Integer(1995));
    ht.put("Dark Side of the Moon", new Integer(1973));
    ht.put("Wish You Were Here", new Integer(1975));
    ht.put("Animals", new Integer(1997));
    ht.put("Ummagumma", new Integer(1969));
    //Hiển thị bảng băm
    System.out.println("Initailly: " + ht.toString());
    //kiểm tra cho bất kỳ tập ảnh nào từ 1969
    if (ht.contains(new Integer(1969))) 
      System.out.println("An album from 1969 exists");
    //kiểm tra cho tập ảnh các con thú
    if (ht.containsKey("Animals"));
    System.out.println("Animals was found");
    //Tìm ra
    Integer year = (Integer) ht.get("Wish You Were Here");
    System.out.println("Wish you Were Here was released in " + year.toString());
    //Xoá một tập ảnh
    System.out.println("Removing Ummagumma\r\n");
    ht.remove(“Ummagumma”);
    //Di chuyển thông qua một bảng liệt kê của tất cả các khoá trong bảng.
    System.out.println("Remaining: \r\n");
    for (Enumeration enum = ht.keys(); enum.hasMoreElements();) 
      System.out.println((String) enum.nextElement());
  }
}