18/03/2021, 09:37

HashMap trong java

Map trong java Nội dung chính Lớp HashMap trong Java Hierarchy của lớp HashMap trong Java Khai báo của lớp HashMap trong Java Constructor của lớp HashMap trong Java Phương thức của lớp HashMap trong Java Khởi tạo một HashMap Duyệt và hiển thị các ...

Map trong java

Nội dung chính

  • Lớp HashMap trong Java
  • Hierarchy của lớp HashMap trong Java
  • Khai báo của lớp HashMap trong Java
  • Constructor của lớp HashMap trong Java
  • Phương thức của lớp HashMap trong Java
  • Khởi tạo một HashMap
  • Duyệt và hiển thị các phần tử có trong HashMap
    • Hiển thị theo tên của HashMap
    • Sử dụng vòng lặp for - duyệt các phần tử của HashMap
    • Sử dụng Map.Entry interface - duyệt các phần tử của HashMap
    • Sử dụng Iterator - duyệt các phần tử của HashMap
  • Truy cập phần tử của HashMap
  • Cập nhật giá trị của phần tử HashMap
  • Xóa phần tử HashMap
  • Tạo HashMap có kiểu generic là đối tượng do người dùng định nghĩa
  • Sự khác nhau giữa HashSet và HashMap
  • HashMap trong Java hoạt động như thế nào?

Lớp HashMap trong Java

Lớp HashMap trong java là một lớp kế thừa lớp AbstractMap và triển khai của Map Interface trong Collections Framework nên nó sẽ có một vài đặc điểm và phương thức tương đồng với Map. HashMap được sử dụng để lưu trữ các phần tử dưới dạng "key/value". Key và value là kiểu dữ liệu bất kỳ, và bạn có thể try cập các giá trị của HasMap bằng một key cụ thể.

Những điểm quan trọng về lớp HashMap trong java là:

  • HashMap lưu trữ dữ liệu dưới dạng cặp key và value.
  • Nó chứa các key duy nhất.
  • Nó có thể có 1 key là null và nhiều giá trị null.
  • Nó duy trì các phần tử KHÔNG theo thứ tự.

Hierarchy của lớp HashMap trong Java

Lớp HashMap extends lớp AbstractMap và implements giao diện Map.

HashMap trong java

Khai báo của lớp HashMap trong Java

Dưới đây là khai báo của lớp java.util.HashMap trong java


public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable

Trong đó:

  • K: đây là kiểu key để lưu trữ.
  • V: đây là kiểu giá trị được ánh xạ.

Constructor của lớp HashMap trong Java

Constructor Mô tả
HashMap() Nó được sử dụng để khởi tạo một HashMap trống.
HashMap(int capacity, float loadFactor) Nó được sử dụng để xây dựng một HashMap trống với dung lượng (capacity) ban đầu được chỉ định và hệ số tải (loadFactor) được chỉ định.
HashMap(int capacity) Nó được sử dụng để xây dựng một HashMap trống với dung lượng ban đầu được chỉ định và hệ số tải mặc định là 0,75.
HashMap(Map t) Nó được sử dụng để xây dựng HashMap mới với một Map đã cho.

Phương thức của lớp HashMap trong Java

Sau đây là các phương thức của lớp HashMap hay được sử dụng trong lập trình Java.

Phương thức Mô tả
void clear() Xóa tất cả các phần tử của HashMap.
Object clone() Trả về một bản copy của HashMap.
boolean containsKey(Object key) Trả về true nếu HashMap chứa một phần tử có key được chỉ định.
boolean containsValue(Object value) Trả về true nếu HashMap chứa một phần tử có giá trị (value) được chỉ định.
Set entrySet() Trả về Collection view các ánh xạ có trong HashMap.
Object get(Object key) Trả về giá trị của key được chỉ định.
boolean isEmpty() Trả về true nếu HashMap trống.
Set keySet() Trả về một Set interface chứa tất cả các key của HashMap.
Object put(Object key, Object value) Thêm một cặp key-value vào HashMap.
void putAll(Map t) Sao chép các phần tử của Map được chỉ định vào HashMap.
Object remove(Object key) Xóa một phần tử có key được chỉ định ra khởi HashMap.
int size() Trả về số phần tử của HashMap.
Collection values() Trả về Collection của các giá trị có trong HashMap.

Khởi tạo một HashMap

Để khai báo một HashMap, chúng ta cần phải import gói thư viện java.util.HashMap của Java. Cú pháp import như sau:


// import gói thư viện java.util.HashMap
import java.util.HashMap;

public class KhoiTaoHashMap {
    public static void main(String[] args) {
        // khai báo 1 HashMap có tên là hashMap1
        // có key là String và value là String
        HashMap<String, String> hashMap1 = new HashMap<String, String>();
    }
}

Duyệt và hiển thị các phần tử có trong HashMap

Để hiển thị các phần tử có trong ArrayList, chúng ta có các cách như sau:

Hiển thị theo tên của HashMap

Bạn có thể sử dụng lệnh System.out.println(hashMap) để hiển thị ra thông tin của đối tượng hashMap. Ví dụ:


package vn.viettuts.collection.hashmap;

import java.util.HashMap;

public class HashMapExample1 {
    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        // khoi tao hashMap
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
        // them cac phan tu vao hashMap
        hashMap.put(1, "Java");
        hashMap.put(3, "C++");
        hashMap.put(2, "PHP");
        hashMap.put(4, "Python");
        // hien thi HashMap
        System.out.println(hashMap);
    }
}

Chạy chương trình trên cho kết quả như sau:

Hiển thị theo tên của HashMap

Sử dụng vòng lặp for - duyệt các phần tử của HashMap

Ví dụ này chúng ta sẽ sử dụng hàm keySet() để lấy ra một đối tượng Set chứa các key của HashMap. Sau đó sử dụng vòng lặp for để lặp các key của đối tượng Set. Sử dụng các key này để lấy ra giá trị tương ứng được lưu trữ trong đối tượng HashMap:


package vn.viettuts.collection.hashmap;

import java.util.HashMap;
import java.util.Set;

/**
 * Vi du su dung vong lap for duyet cac phan tu cua HashMap
 * 
 * @author viettuts.vn
 */
public class HashMapExample2 {

    public static void main(String args[]) {
        // init hashMap
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
        // add elements to hashMap
        hashMap.put(1, "Java");
        hashMap.put(3, "C++");
        hashMap.put(2, "PHP");
        hashMap.put(4, "Python");
        // hien thi HashMap
        show(hashMap);
    }
    
    public static void show(HashMap<Integer, String> hashMap) {
        Set<Integer> keySet = hashMap.keySet();
        for (Integer key : keySet) {
            System.out.println(key + " - " + hashMap.get(key));
        }
    }
}

Chạy chương trình trên cho kết quả như sau:

HashMap trong Java

Sử dụng Map.Entry interface - duyệt các phần tử của HashMap

Bạn có thể sử dụng phương thức entrySet() để duyệt các phần tử của HashMap, phương thức này trả về một đối tượng Map.Entry. Vi dụ:


package vn.viettuts.collection.hashmap;

import java.util.HashMap;
import java.util.Map;
 
public class HashMapExample7 {
    public static void main(String args[]) {
        // init map
        HashMap<Integer, String> map = new HashMap<Integer, String>();
        // add elements to map
        map.put(1, "Java");
        map.put(3, "C++");
        map.put(2, "PHP");
        map.put(4, "Python");
        // show map
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
    }
}

Chạy chương trình trên cho kết quả như sau:

HashMap trong Java

Sử dụng Iterator - duyệt các phần tử của HashMap

Bạn có thể sử dụng phương thức keySet().iterator() để duyệt các phần tử của HashMap. Vi dụ:


package vn.viettuts.collection.hashmap;

import java.util.Iterator;
import java.util.TreeMap;

public class HashMapExample8 {
    public static void main(String args[]) {
        // khoi tao map
        TreeMap<String, String> map = new TreeMap<String, String>();
        // them cac phan tu vao map
        map.put("J", "Java");
        map.put("C", "C++");
        map.put("P", "PHP");
        map.put("Py", "Python");
        // show hashMap
        Iterator<String> itr = map.keySet().iterator();
        while (itr.hasNext()) {
            System.out.println(map.get(itr.next()));
        }
    }
}

Chạy chương trình trên cho kết quả như sau:

HashMap trong Java

Truy cập phần tử của HashMap

Phương thức get(key) trả về giá trị của phần tử có key đã chỉ định, ví dụ:


package vn.viettuts.collection.hashmap;

import java.util.HashMap;

/**
 * truy cap phan tu cua HashMap
 * 
 * @author viettuts.vn
 */
public class HashMapExample3 {

    public static void main(String args[]) {
        // init hashMap
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
        // add elements to hashMap
        hashMap.put(1, "Java");
        hashMap.put(3, "C++");
        hashMap.put(2, "PHP");
        hashMap.put(4, "Python");
        // hien thi HashMap
        System.out.println("Phan tu co key = 1 la: " + hashMap.get(1));
        System.out.println("Phan tu co key = 2 la: " + hashMap.get(2));
    }
}

Chạy chương trình trên cho kết quả như sau:

HashMap trong Java

Cập nhật giá trị của phần tử HashMap

Phương thức put() được sử dụng để thêm phần tử, đồng thời bạn cũng có thể sử dụng phương thức này để cập nhật giá trị của phần tử hashMap, ví dụ:


package vn.viettuts.collection.hashmap;

import java.util.HashMap;

/**
 * cap nhat phan tu cua HashMap
 * 
 * @author viettuts.vn
 */
public class HashMapExample4 {

    public static void main(String args[]) {
        // khoi tao hashMap
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
        // them cac phan tu vao hashMap
        hashMap.put(1, "Java");
        hashMap.put(3, "C++");
        hashMap.put(2, "PHP");
        hashMap.put(4, "Python");
        // hien thi hashMap
        System.out.println(hashMap);
        // cap nhat gia tri cua phan tu co key = 4
        hashMap.put(4, "Angular8");
        // hien thi hashMap
        System.out.println(hashMap);
    }
}

Chạy chương trình trên cho kết quả như sau:

HashMap trong Java

Xóa phần tử HashMap

Bạn có thể sử dụng phương thức remove() để xóa một phần tử, hoặc phương thức clear() để xóa hoàn toàn các phần tử của một HashMap. Ví dụ:


package vn.viettuts.collection.hashmap;

import java.util.HashMap;

/**
 * Xoa phan tu cua HashMap
 * 
 * @author viettuts.vn
 */
public class HashMapExample5 {

    public static void main(String args[]) {
        // khoi tao hashMap
        HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
        // them cac phan tu vao hashMap
        hashMap.put(1, "Java");
        hashMap.put(3, "C++");
        hashMap.put(2, "PHP");
        hashMap.put(4, "Python");
        // hien thi hashMap
        System.out.println(hashMap);
        // xoa phan tu co key = 4
        hashMap.remove(4);
        // hien thi hashMap
        System.out.println(hashMap);
        // xoa toan bo hashMap
        hashMap.clear();
        // hien thi hashMap
        System.out.println(hashMap);
    }
}

Chạy chương trình trên cho kết quả như sau:

HashMap trong Java

Tạo HashMap có kiểu generic là đối tượng do người dùng định nghĩa

Ví dụ tạo một lớp Student, sau đó tạo một đối tượng HashMap với key có kiểu String, value có kiểu Student:

Lớp Student.java


package vn.viettuts.collection.hashmap;

/**
 * Student class
 * 
 * @author viettuts.vn
 */
public class Student{
    private String name;
    private int age;
    private String address;

    public Student() {
    }

    public Student(String name, int age, String address) {
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student@name=" + name + ",age=" + age + ",address=" + address;
    }
}

Lớp HashMapExample6.java


package vn.viettuts.collection.hashmap;

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

public class HashMapExample6 {
    /**
     * main
     * 
     * @author viettuts.vn
     * @param args
     */
    public static void main(String args[]) {
        // init hashMap
        Map<String, Student> hashMap = new HashMap<String, Student>();
        // add elements to hashMap
        hashMap.put("1", new Student("A", 12, "Hanoi"));
        hashMap.put(null, new Student("C", 13, "Hanoi"));
        hashMap.put("2", null);
        hashMap.put("4", new Student("D", 14, "Hanoi"));
        // show hashMap
        show(hashMap);
    }

    /**
     * show HashMap
     * 
     * @param viettuts.vn
     */
    public static void show(Map<String, Student> map) {
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            System.out.println(key + " " + map.get(key));
        }
    }
}

Chạy chương trình trên cho kết quả như sau:

HashMap trong Java

Sự khác nhau giữa HashSet và HashMap

Đây cũng là một câu hỏi phỏng vấn được hỏi với tần suất cao.

Câu trả lời là: HashSet chỉ chứa giá trị (value) trong khi HashMap chứa cặp key và value.

HashMap trong Java hoạt động như thế nào?

Xem thêm tại: HashMap trong Java hoạt động như thế nào?

Map trong java

:

  • Mảng (Array) trong java
  • ArrayList trong java
  • Sự khác nhau giữa Array với ArrayList
  • Sắp xếp các phần tử của List
  • Sự khác nhau giữa ArrayList và Vector
  • TreeSet trong java
  • HashSet trong java
  • Sự khác nhau giữa HashMap và Hashtable
  • List câu hỏi phỏng vấn Java Collection
0