Giới thiệu

Xin chào các bạn, những nhà phép thuật Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới của LinkedHashMap. Đừng lo lắng nếu bạn chưa từng viết một dòng mã code nào trước đây – tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ khám phá chủ đề này cùng nhau bước به bước. Cuối tutorial này, bạn sẽ ngạc nhiên về mức độ học được của mình!

Java - LinkedHashMap

LinkedHashMap giống như một chiếc hộp thần kỳ có thể lưu trữ các mục của bạn (chúng ta gọi chúng là cặp khóa-giá trị trong lập trình) theo thứ tự cụ thể. Hãy tưởng tượng bạn đang tổ chức các cuốn sách yêu thích của mình trên kệ sách. Không chỉ có thể bạn nhanh chóng tìm thấy bất kỳ cuốn sách nào mà bạn muốn, mà bạn còn có thể giữ chúng theo thứ tự bạn thêm vào hoặc dựa trên tần suất bạn đọc chúng. Đó chính là điều mà LinkedHashMap làm cho dữ liệu của chúng ta!

Khai báo Lớp

Hãy bắt đầu với cách khai báo LinkedHashMap trong Java:

import java.util.LinkedHashMap;

public class MyLinkedHashMapExample {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();
    }
}

Trong ví dụ này, chúng ta đang tạo một LinkedHashMap có tên là myBookshelf. Phần <String, Integer> cho biết Java rằng chúng ta sẽ sử dụng String làm khóa (tên cuốn sách) và Integer làm giá trị ( có thể là số trang). Đừng lo lắng nếu điều này trông khó hiểu bây giờ – chúng ta sẽ phân tích chi tiết khi tiến hành.

Tham số

Khi làm việc với LinkedHashMap, chúng ta có một số tham số cần xem xét:

  1. initialCapacity: Điều này giống như quyết định kích thước ban đầu của kệ sách của bạn.
  2. loadFactor: Hãy tưởng tượng điều này là kệ sách của bạn có thể đầy đến mức nào trước khi bạn cần một kệ lớn hơn.
  3. accessOrder: Điều này xác định xem cuốn sách của bạn sẽ được sắp xếp theo thứ tự bạn thêm chúng vào hay theo tần suất bạn truy cập chúng.

Hãy xem một ví dụ:

LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>(16, 0.75f, true);

Ở đây, chúng ta đang nói rằng kệ sách ban đầu của chúng ta có thể chứa 16 cuốn sách, chúng ta sẽ xem xét việc lấy một kệ lớn hơn khi nó đầy 75%, và chúng ta muốn sắp xếp cuốn sách dựa trên tần suất truy cập chúng.

Các Hàm Khởi tạo của Lớp

LinkedHashMap cung cấp nhiều cách để tạo "kệ sách" thần kỳ của chúng ta. Dưới đây là các hàm khởi tạo chính:

  1. LinkedHashMap(): Tạo một LinkedHashMap trống với các thiết lập mặc định.
  2. LinkedHashMap(int initialCapacity): Xác định khả năng ban đầu.
  3. LinkedHashMap(int initialCapacity, float loadFactor): Xác định cả khả năng ban đầu và hệ số tải.
  4. LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder): Xác định tất cả ba tham số.
  5. LinkedHashMap(Map<? extends K, ? extends V> m): Tạo một LinkedHashMap với các ánh xạ tương tự như của map được chỉ định.

Hãy thử tạo các LinkedHashMap bằng cách sử dụng các hàm khởi tạo khác nhau:

LinkedHashMap<String, Integer> shelf1 = new LinkedHashMap<>();
LinkedHashMap<String, Integer> shelf2 = new LinkedHashMap<>(20);
LinkedHashMap<String, Integer> shelf3 = new LinkedHashMap<>(20, 0.8f);
LinkedHashMap<String, Integer> shelf4 = new LinkedHashMap<>(20, 0.8f, true);

Map<String, Integer> existingMap = new HashMap<>();
existingMap.put("Java Basics", 200);
LinkedHashMap<String, Integer> shelf5 = new LinkedHashMap<>(existingMap);

Mỗi một trong những này tạo ra một "kệ sách" khác nhau dựa trên nhu cầu của chúng ta. Có phải Java rất linh hoạt không?

Các Phương thức của Lớp

Bây giờ, hãy xem một số phương thức thường được sử dụng trong LinkedHashMap. Tôi sẽ trình bày chúng dưới dạng bảng để dễ tham khảo:

Phương thức Mô tả
put(K key, V value) Thêm một cặp khóa-giá trị mới vào LinkedHashMap
get(Object key) Truy xuất giá trị liên kết với khóa được chỉ định
remove(Object key) Loại bỏ ánh xạ cho khóa được chỉ định
clear() Loại bỏ tất cả các ánh xạ từ LinkedHashMap
size() Trả về số lượng cặp khóa-giá trị trong LinkedHashMap
isEmpty() Trả về true nếu LinkedHashMap trống
containsKey(Object key) Trả về true nếu LinkedHashMap chứa khóa được chỉ định
containsValue(Object value) Trả về true nếu LinkedHashMap chứa giá trị được chỉ định
keySet() Trả về một Set chứa tất cả các khóa trong LinkedHashMap
values() Trả về một Collection chứa tất cả các giá trị trong LinkedHashMap
entrySet() Trả về một Set chứa tất cả các cặp khóa-giá trị trong LinkedHashMap

Hãy xem một số phương thức này trong hành động:

LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();

// Thêm sách vào kệ của chúng ta
myBookshelf.put("Java Basics", 200);
myBookshelf.put("Data Structures", 350);
myBookshelf.put("Algorithms", 400);

// Lấy số trang cho "Java Basics"
int javaPages = myBookshelf.get("Java Basics");
System.out.println("Java Basics có " + javaPages + " trang.");

// Kiểm tra xem chúng ta có sách về Python không
boolean hasPython = myBookshelf.containsKey("Python for Beginners");
System.out.println("Chúng ta có sách Python không? " + hasPython);

// Loại bỏ sách Algorithms
myBookshelf.remove("Algorithms");

// In tất cả các tựa đề sách
for (String title : myBookshelf.keySet()) {
    System.out.println("Tựa đề sách: " + title);
}

Đoạn mã này minh họa cách chúng ta có thể thêm sách vào kệ, truy xuất thông tin về chúng, kiểm tra xem chúng ta có các cuốn sách cụ thể không, loại bỏ sách và liệt kê tất cả các sách mà chúng ta có. Rất ngon lành, phải không?

Các Phương thức Kế thừa

LinkedHashMap cũng kế thừa các phương thức từ các lớp cha của nó. Dưới đây là một số phương thức quan trọng:

Kế thừa từ Các phương thức
HashMap clone(), compute(), computeIfAbsent(), computeIfPresent(), merge()
AbstractMap equals(), hashCode(), toString()
Object finalize(), getClass(), notify(), notifyAll(), wait()

Các phương thức kế thừa này cung cấp thêm các chức năng có thể rất hữu ích trong một số tình huống cụ thể.

Ví dụ Lấy Giá trị từ LinkedHashMap

Hãy kết thúc với một ví dụ hoàn chỉnh về việc tạo một LinkedHashMap, thêm một số giá trị và truy xuất chúng:

import java.util.LinkedHashMap;

public class BookshelfExample {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();

        // Thêm sách vào kệ của chúng ta
        myBookshelf.put("Java Basics", 200);
        myBookshelf.put("Data Structures", 350);
        myBookshelf.put("Algorithms", 400);

        // Truy xuất và in thông tin về mỗi cuốn sách
        for (String title : myBookshelf.keySet()) {
            int pages = myBookshelf.get(title);
            System.out.println("Cuốn sách '" + title + "' có " + pages + " trang.");
        }

        // Lấy một cuốn sách cụ thể
        String bookToFind = "Data Structures";
        if (myBookshelf.containsKey(bookToFind)) {
            int pages = myBookshelf.get(bookToFind);
            System.out.println("\nTìm thấy nó! '" + bookToFind + "' có " + pages + " trang.");
        } else {
            System.out.println("\nXin lỗi, chúng ta không có '" + bookToFind + "' trên kệ sách của mình.");
        }
    }
}

Đầu ra

Khi bạn chạy mã này, bạn sẽ thấy đầu ra tương tự như này:

Cuốn sách 'Java Basics' có 200 trang.
Cuốn sách 'Data Structures' có 350 trang.
Cuốn sách 'Algorithms' có 400 trang.

Tìm thấy nó! 'Data Structures' có 350 trang.

Và đó là tất! Bạn vừa tạo ra kệ sách điện tử của riêng mình bằng cách sử dụng LinkedHashMap. Bạn có thể thêm sách, tìm hiểu số trang của chúng và thậm chí kiểm tra xem một cuốn sách cụ thể có trên kệ sách của bạn không. Có phải lập trình rất thú vị không?

Hãy nhớ, giống như tổ chức một kệ sách thực tế, khi bạn thực hành sử dụng LinkedHashMap nhiều hơn, bạn sẽ cảm thấy dễ dàng hơn với nó. Đừng sợ thử nghiệm và thử các điều gì khác nhau. Chúc bạn mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mãi mã

Credits: Image by storyset