Map interface trong Java

Map interface trong Java cung cấp các chức năng của một map-data-structure, được dùng để lưu một cặp giá trị key/value. Key là một giá trị duy nhất tương ứng với một value.

Chúng ta có thể truy cập, chỉnh sửa các giá trị thông qua một key tương ứng với nó. Ví dụ trong sơ đồ trên chúng ta có key là us tương ứng với United States, br ứng với BrazilesSpain.

Java Map Hierarchy

 

Chúng ta có 2 interface Map và SortedMap để triển khai các chức năng của Map, và 2 implement HashMap, LinkedHashMap, TreeMap triển khai từ các interface trên.

import java.util.*; 
class HashMapDemo { 
    public static void main(String args[]) 
    { 
        Map<String, Integer> hm 
            = new HashMap<String, Integer>(); 
  
        hm.put("a", new Integer(100)); 
        hm.put("b", new Integer(200)); 
        hm.put("c", new Integer(300)); 
        hm.put("d", new Integer(400)); 
  
        // Traversing through the map 
        for (Map.Entry<String, Integer> me : hm.entrySet()) { 
            System.out.print(me.getKey() + ":"); 
            System.out.println(me.getValue()); 
        } 
    } 
} 

Output

a:100
b:200
c:300
d:400

Các thao tác cơ bản trên Map

Như đã đề cập ở trên thì Map chỉ là một interface định nghĩa các method chức năng của một map data structure. Do vậy để thao tác với Map chúng ta cần đến một implement của nó. Trong phần này mình sẽ lấy các ví dụ thông qua HashMap class, một trong những Map implement được sử dụng nhiều nhất.

Thêm phần tử trong Map

Để thêm một phần tử vào HashMap, chúng ta có thể sử dụng phương thức put(). Tuy nhiên các bạn lưu ý rằng thứ tự thêm vào không được giữ lại trong Hashmap. Nội bộ bên trong HashMap, mỗi phần tử sẽ có một mã băm riêng, HashMap lập chỉ mục cho các phần tử dựa vào mã băm này, về cơ bản mã băm này rất khó trùng cho phép việc lập chỉ mục hiệu quả hơn.

import java.util.*; 
class GFG { 
    public static void main(String args[]) 
    { 

        Map<Integer, String> hm1 = new HashMap<>(); 
        hm1.put(1, "Share"); 
        hm1.put(2, "programming"); 
        hm1.put(3, ".net"); 
        System.out.println(hm1); 
    } 
} 

Output

{1=Share, 2=programming, 3=.net}

Update trong Map

Sau khi thêm các phần tử nếu muốn cập nhật lại, thì chúng ta có thể sử dụng lại phương thức put ()Vì các phần tử trong bản đồ được lập chỉ mục bằng cách sử dụng các key, nên giá trị của khóa có thể được thay đổi bằng cách chỉ cần chèn value cho key tương ứng mà chúng ta muốn cập nhật.

import java.util.*; 
class GFG { 
    public static void main(String args[]) 
    { 
  
        // Initialization of a Map 
        // using Generics 
        Map<Integer, String> hm1 
            = new HashMap<Integer, String>(); 
  
        // Inserting the Elements 
        hm1.put(new Integer(1), "Share"); 
        hm1.put(new Integer(2), "Share"); 
        hm1.put(new Integer(3), ".net"); 
  
        System.out.println("Initial Map " + hm1); 
  
        hm1.put(new Integer(2), "programming"); 
  
        System.out.println("Updated Map " + hm1); 
    } 
} 

Output

Initial Map {1=Share, 2=Share, 3=.net}
Updated Map {1=Share, 2=programming, 3=.net}

Xóa phần tử trong Map

Để xóa một phần tử khỏi HashMap, chúng ta có thể sử dụng phương thức remove (). Phương thức này nhận giá trị key và xóa phần tử trong HashMap có giá trị key tương ứng với key được truyền vào.

import java.util.*; 
class GFG { 
  
    public static void main(String args[]) 
    { 
  
        // Initialization of a Map 
        // using Generics 
        Map<Integer, String> hm1 
            = new HashMap<Integer, String>(); 
  
        // Inserting the Elements 
        hm1.put(new Integer(1), "share"); 
        hm1.put(new Integer(2), "programming"); 
        hm1.put(new Integer(3), "share"); 
        hm1.put(new Integer(4), ".net"); 
  
        // Initial Map 
        System.out.println(hm1); 
  
        hm1.remove(new Integer(3)); 
  
        // Final Map 
        System.out.println(hm1); 
    } 
} 

Output

{1=share, 2=programming, 3=share, 4=.net}
{1=share, 2=programming, 3=.net}

Duyệt phần tử trong Map

Có nhiều cách để duyệt các phần tử trong Map, tuy nhiên cách thường được sử dụng là for-each

import java.util.*; 
class GFG { 
    public static void main(String args[]) 
    { 
  
        // Initialization of a Map 
        // using Generics 
        Map<Integer, String> hm1 
            = new HashMap<Integer, String>(); 
  
        // Inserting the Elements 
        hm1.put(new Integer(1), "Share"); 
        hm1.put(new Integer(2), "programming"); 
        hm1.put(new Integer(3), ".net"); 
  
        for (Map.Entry mapElement : hm1.entrySet()) { 
            int key 
                = (int)mapElement.getKey(); 
  
            // Finding the value 
            String value 
                = (String)mapElement.getValue(); 
  
            System.out.println(key + " : "
                               + value); 
        } 
    } 
} 

Output

1 : Share
2 : programming
3 : .net

Các đặc điểm nổi bậc của Map

Một Map không thể chứa các key trùng lặp và mỗi key chỉ liên kết với một value duy nhất. Một số implement của Map cho phép key và value có giá trị NULL như HashMap, LinkedHashMap và một số thì không như TreeMap.

Thứ tự các phần tử được thêm vào tùy thuộc vào các implement của nó, ví dụ TreeMap và LinkedHashMap giữ lại thứ tự các phần tử được thêm vào trong khi đó HashMap thì không.

Có 2 interface để triển khai map trong Java là SortedMap và Map và 3 class HashMap, TreeMap và LinkedHashMap triển khai từ chúng.

Khi nào sử dụng Map

Map là một lựa chọn tối ưu cho các trường hợp dữ liệu được tổ chức thành key-value ví dụ như từ điển. Map được sử dụng để thực hiện tra cứu theo key hoặc khi ai đó muốn truy xuất và cập nhật các yếu tố bằng key. Một số ví dụ:

  • Một map chứa danh sách các Errror và mô tả của chúng
  • Một map của zip và city
  • Một map của các nhà quản lý và nhân viên. Mỗi manager là một key chứa một danh sách của nhân viên.
  • Một map của một class và student, class đóng vai trò là key và danh sách các student là value.

 

Nguồn tham khảo

https://www.geeksforgeeks.org/map-interface-java-examples/

https://www.programiz.com/java-programming/map

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x