1. LinkedHashMap trong Java là gì?

LinkedHashMap trong Java là một lớp con kế thừa lại từ lớp HashMap, nó cũng được sử dụng để triển khai Map Interface trong Java. Lớp LinkedHashMap() được bổ xung thêm tính chất duy trì thứ tự các phần tử được thêm vào nó. Chính vì thế nên, khi sử dụng lớp LinkedHashMap() chúng ta có thể thao tác với các phần tử thông qua việc truy cập theo thứ tự chèn của chúng.

Một lớp LinkedHashMap() chứa các phần tử là các cặp keyvalue. Nó chỉ cho phép chứa các phần tử có Key là duy nhất và chỉ chứa các phần tử duy nhất. Các tính chất này của lớp LinkedHashMap() khá giống với các tính chất của lớp HashMap() trong Java.

Chúng ta hoàn toàn có thể tìm thấy lớp LinkedHashMap() trong gói java.util. vì thế để sử dụng được lớp này, ta cần nhập vào thư viện import java.util.*;

2. Khai báo LinkedHashMap trong Java

Khai báo một lớp LinkedHashMap() trong chương trình Java, ta cần phải chỉ ra kiểu dữ liệu cho khóa Key và kiểu dữ liệu cho giá trị Value sau đó, đặt một tên cho đối tượng LinkedHashMap() cần khởi tạo. Cú pháp khai báo lớp LinkedHashMap() trong Java như sau:

LinkedHashMap <typeKey, typeValue> name = new LinkedHashMap <typeKey, typeValue>();

Trong đó:

  • typeKey là kiểu dữ liệu của khóa trong LinkedHashMap
  • typeValue là kiểu dữ liệu của giá trị tương ứng với khóa trong LinkedHashMap
  • name là tên của đối tượng LinkedHashMap cần khởi tạo

Khác với lớp cha HashMap() của nó, lớp LinkedHashMap() sẽ bao gồm 5 Constructor khởi tạo. Các Constructor này được liệt kê kèm tên và mô tả ở bảng bên dưới đây:

Constructor Mô tả
LinkedHashMap () Constructor mặc định của lớp LinkedHashMap.
LinkedHashMap (Map<? extends K,? extends V> m) Khởi tạo một LinkedHashMap bằng cách sử dụng lại các đối tượng trong Map.
LinkedHashMap (int capacity) Khởi tạo một LinkedHashMap với dung lượng được chỉ định sẵn.
LinkedHashMap (int capacity, float loadFactor) Khởi tạo một LinkedHashMap với  dung lượng và hệ số tải được chỉ định sẵn.
LinkedHashMap(int capacity, float loadFactor, boolean accessOrder) Khởi tạo một LinkedHashMap với  dung lượng, hệ số tải và accessOrder được chỉ định sẵn.

Ví dụ đơn giản dưới đây, chúng ta sẽ cùng nhau khởi tạo một lớp LinkedHashMap() với Constructor mặc định. Sau đó sẽ đi kiểm tra xem LinkedHashMap vừa khởi tạo có rỗng hay không? Đồng thời hiển thị ra tất cả các phần tử có bên trong LinkedHashMap vừa khởi tạo.

import java.util.*;  
public class Main{  
    public static void main(String args[]){  
        //Khai bao lop LinkedHashMap() co Key kieu Integer, Value kieu String
        LinkedHashMap<Integer,String> linkedHm =new LinkedHashMap<Integer,String>();  
        //Kiem tra LinkedHashMap vua tao co rong hay khong?
        boolean result = linkedHm.isEmpty();
        System.out.println("LinkedHashMap vua khoi tao co rong hay khong? \n" + result);
        //Kiem tra phan tu trong LinkedHashMap
        System.out.println("Phan tu co trong LinkedHashMap la: \n" + linkedHm); 
    }  
}

Kết quả:

LinkedHashMap vua khoi tao co rong hay khong? 
true
Phan tu co trong LinkedHashMap la: 
{}

Từ ví dụ trên, ta dễ dàng nhận thấy rằng khi một lớp LinkedHashMap() được khởi tạo thành công sẽ là một LinkedHashMap rỗng và chúng sử dụng cặp dấu ngoặc nhọn {} để lưu trữ các phần tử bên trong. Điều này khá giống với lớp cha HashMap của nó!

3. Thao tác với LinkedHashMap trong Java

Các ví dụ dưới đây sẽ chủ yếu đề cập tới các thao tác cơ bản khi sử dụng lớp LinkedHashMap() trong Java, các thao tác đó sẽ là: thêm phần tử LinkedHashMap , truy cập phần tử trong LinkedHashMap, duyệt các phần tử LinkedHashMap, xóa phần tử trong LinkedHashMap

3.1 Thêm phần tử vào LinkedHashMap trong Java

Mỗi phần tử trong LinkedHashMap sẽ là các cặp giá trị KeyValue tương ứng, vì thế nên khi thực hiện thêm phần tử vào trong LinkedHashMap ta sẽ cần thêm đầy đủ các KeyValue của phần tử cần thêm đó.

Bởi vì lớp LinkedHashMap() kế thừa lại lớp HashMap() nên chúng hoàn toàn có thể sử dụng lại phương thức put() để thực hiện công việc thêm phần tử. Phương thức này sẽ yêu cầu nhập vào hai tham số là: tham số thứ nhất là Key của phần tử cần thêm, tham số thứ hai là Value của phần tử cần thêm.

import java.util.*;  
public class Main {
    public static void main(String[] args) {
        //Khoi tao mot LinkedHashMap co Key kieu Integer, Value kieu String
        LinkedHashMap<Integer,String> linkedHm = new LinkedHashMap<Integer,String>();
        //Kiem tra LinkedHashMap vua tao co rong hay khong?
        boolean result = linkedHm.isEmpty();
        System.out.println("LinkedHashMap vua khoi tao co rong hay khong? \n" + result);
        //Kiem tra phan tu trong LinkedHashMap
        System.out.println("Phan tu co trong LinkedHashMap la: \n" + linkedHm);  
        
        //Them cac phan tu vao LinkedHashMap
        linkedHm.put(100,"Oto");  
        linkedHm.put(101,"Xe May");  
        linkedHm.put(102,"May Bay");  
        linkedHm.put(103,"Tau Hoa"); 
        linkedHm.put(100,"Xe Dap"); 
        
        //Kiem tra LinkedHashMap sau khi them phan tu co rong khong?
        boolean result2 = linkedHm.isEmpty();
        System.out.println("LinkedHashMap sau khi them phan tu co rong hay khong? \n" + result2); 
        //Kiem tra phan tu trong LinkedHashMap
        System.out.println("Phan tu co trong HashMap sau khi them la: \n" + linkedHm);
    }
}

Kết quả:

LinkedHashMap vua khoi tao co rong hay khong? 
true
Phan tu co trong LinkedHashMap la: 
{}
LinkedHashMap sau khi them phan tu co rong hay khong? 
false
Phan tu co trong HashMap sau khi them la: 
{100=Xe Dap, 101=Xe May, 102=May Bay, 103=Tau Hoa}

Lưu ý: Nếu bạn cố gắng lưu trữ khóa trùng lặp với một khóa khác trong LinkedHashMap nó sẽ thay thế giá trị của khóa đó. Bởi vì tính chất không được phép lưu trữ các phần tử có khóa giống nhau trong LinkedHashMap.

3.2 Lấy tất cả khóa và giá trị trong LinkedHashMap

Chúng ta hoàn toàn có thể lấy ra một tập hợp các khóa Key bên trong LinkedHashMap và cũng có thể lấy ra một tập hợp các giá trị Value bên trong LinkedHashMap.

Phương thức keySet() cho phép ta lấy ra toàn bộ khóa Key và phương thức values() cho phép ta lấy ra toàn bộ Value bên trong LinkedHashMap. Ngoài ra, ta cũng có thể sử dụng phương thức entrySet() để lấy ra các cặp Key=Value có trong LinkedHashMap.

import java.util.*;  
public class Main {
    public static void main(String[] args) {
        //Khoi tao mot LinkedHashMap co Key kieu Integer, Value kieu String
        LinkedHashMap<Integer,String> linkedHm = new LinkedHashMap<Integer,String>();
        //Them cac phan tu vao LinkedHashMap
        linkedHm.put(100,"Oto");  
        linkedHm.put(101,"Xe May");  
        linkedHm.put(102,"May Bay");  
        linkedHm.put(103,"Tau Hoa"); 
        
        //Lay ra tat ca cac Key trong LinkedHashMap
        System.out.println("Keys: "+linkedHm.keySet());  
        //Lay ra tat ca cac Value trong LinkedHashMap
        System.out.println("Values: "+linkedHm.values());  
        //Lay ra cac cap phan tu Key=Value
        System.out.println("Cap phan tu trong LinkedHashMap \n"+linkedHm.entrySet());  
    }
}

Kết quả:

Keys: [100, 101, 102, 103]
Values: [Xe Dap, Xe May, May Bay, Tau Hoa]
Cap phan tu trong LinkedHashMap 
[100=Xe Dap, 101=Xe May, 102=May Bay, 103=Tau Hoa]

3.3 Xóa phần tử trong LinkedHashMap

Xóa phần tử trong một LinkedHashMap sẽ loại bỏ đi cặp giá trị KeyValue của phần tử đó. Điều kiện cần để thực hiện xóa đi một phần tử trong LinkedHashMap đó là ta cần phải biết Key của phần tử cần xóa.

Để thực hiện được việc xóa phần tử trong LinkedHashMap, ta sẽ cần gọi đến phương thức remove() – phương thức này yêu cầu nhập vào Key của phần tử cần xóa khỏi LinkedHashMap.

import java.util.*;  
public class Main {
    public static void main(String[] args) {
        //Khoi tao mot LinkedHashMap co Key kieu Integer, Value kieu String
        LinkedHashMap<Integer,String> linkedHm = new LinkedHashMap<Integer,String>();
        //Them cac phan tu vao LinkedHashMap
        linkedHm.put(100,"Oto");  
        linkedHm.put(101,"Xe May");  
        linkedHm.put(102,"May Bay");  
        linkedHm.put(103,"Tau Hoa"); 
        //Hien thi phan tu trong LinkedHashMap ban dau
        System.out.println("Phan tu cua LinkedHashMap ban dau la: \n" + linkedHm);  
        
        //Xoa phan tu co Key=100 va Key=102
        linkedHm.remove(100);
        linkedHm.remove(102);
        //Hien thi lai LinkedHashMap sau khi xoa
        System.out.println("Phan tu cua LinkedHashMap sau khi xoa la: \n" + linkedHm);  
    }
}

Kết quả:

Phan tu cua LinkedHashMap ban dau la: 
{100=Oto, 101=Xe May, 102=May Bay, 103=Tau Hoa}
Phan tu cua LinkedHashMap sau khi xoa la: 
{101=Xe May, 103=Tau Hoa}

4. Các phương thức của LinkedHashMap trong Java

Phương thức Mô tả
put(Object key, Object value) Chèn một cặp phần tử (Key,Value) vào trong LinkedHashMap.
void putAll(Map map) Chèn các phần tử của LinkedHashMap này vào trong một LinkedHashMap khác.
putIfAbsent(K key, V value) Chèn Value được chỉ định với Key được chỉ định vào trong LinkedHashMap nếu nó chưa có trong LinkedHashMap.
remove(Object key) Xóa đi một cặp phần tử trong LinkedHashMap dựa vào Key
boolean remove(Object key, Object value) Xóa đi một cặp phần tử trong LinkedHashMap dựa theo Key và Value.
Set keySet() Chuyển các Key của LinkedHashMap vào trong một Set.
Set<Map.Entry<K,V>> entrySet() Chuyển đổi các phần tử trong LinkedHashMap sang Set bao gồm giá trị Key,Value của LinkedHashMap ban đầu.
void clear() Xóa đi toàn bộ phần tử trong LinkedHashMap.
boolean equals(Object o) So sánh xem một giá trị được chỉ định với LinkedHashMap xem chúng có bằng nhau không?
boolean containsKey(Object key) Trả về True nếu một Key thuộc trong LinkedHashMap, ngược lại sẽ trả về False.
void forEach(BiConsumer<? super K,? super V> action) Duyệt qua từng phần tử có trong một LinkedHashMap, sau khi tất cả phần tử đã được duyệt xong thì sẽ ném ra một ngoại lệ.
get(Object key) Lấy ra giá trị Value dựa theo Key được chỉ định trong LinkedHashMap.
getOrDefault(Object key, V defaultValue) Lấy ra giá trị Value dựa theo Key. Nếu Key không tồn tại trong LinkedHashMap thì sẽ đặt defaultValue cho Key đó.
int hashCode() Trả về giá trị mã băm cho LinkedHashMap.
boolean isEmpty() Kiểm tra xem LinkedHashMap đó có rỗng hay không?
replace(K key, V value) Thay thế một Value mới dựa theo Key trong LinkedHashMap.
boolean replace(K key, V oldValue, V newValue) Thay thế Value cũ oldValue thành một Value mới newValue dựa vào Key trong LinkedHashMap.
Collection values() Chuyển đổi các Value trong LinkedHashMap vào Collection.
int size() Lấy ra số lượng phần tử trong LinkedHashMap.