So sánh HashMap và Hashset trong Java
19/11/2021 13:21
Hashmap và HashSet là hai trong số các lớp Collection quan trọng nhất trong Java. Chúng nằm trong gói java.util. Chúng ta sử dụng cả hai để phục vụ các mục đích khác nhau của cấu trúc dữ liệu. Chủ đề này là một trong những câu hỏi quan trọng trong những cuộc phỏng vấn về Java. Do đó, bạn phải biết kỹ lưỡng về chúng và sự khác biệt giữa chúng. Cùng tìm hiểu về Hashmap và HashSet trong Java ngay trong bài viết dưới đây.
- HashSet trong Java là gì?
- Hashmap trong Java là gì
- Sự khác biệt giữa HashSet và HashMap trong Java
- Triển khai hệ thống phân cấp
- Cách lưu trữ dữ liệu của HashMap và HashSet trong Java
- >>> Tham khảo: Khóa học lập trình Java
- Nhân bản giá trị trong Hashmap và HashSet trong Java
- Giá trị rỗng - Null trong Hashmap và HashSet trong Java
- Phương thức chèn phần tử HashMap và HashSet trong Java
- Hiệu suất của HashMap và HashSet trong Java
- Bảng so sánh HashSet và HashMap trong Java
- Khi nào sử dụng HashSet và HashMap trong Java
HashSet trong Java là gì?
Hashset là một collection framework thực hiện giao diện Set và không cho phép nhân bản bất kỳ giá trị nào. Tất cả các đối tượng lưu trữ trong HashSet phải ghi đè phương thức equals() và hashCode() để chúng ta có thể kiểm tra giá trị nhân bản. HashSet không phả là luồng an toàn và không được đồng bộ hóa. Có một phương thức Add() thêm yếu tố trong HashSet.
Cú pháp của phương thức này là:
public boolean add(Object obj)
Phương thức này trả lại giá trị boolean. Nó trả lại kết quả true nếu là phần tử là độc nhất và thêm phần tử thành công, trả về giá trị false nếu có một giá trị trùng lặp được thêm vào HashSet.
Ví dụ:
HashSet vehicleSet = new HashSet();
vehicleSet.add(“Car”);
vehicleSet.add(“Motorcycle”);
vehicleSet.add(“Bus”);
Hashmap trong Java là gì
Hashmap là một bảng Hash thực hiện giao diện Map và ánh xạ một khóa đến giá trị. HashMap cũng không cho phép các khóa trùng lặp nhưng cho phép các giá trị trùng lặp trong đó. Giao diện Map có hai lớp triển khai là TreeMap duy trì thứ tự của các đối tượng. HashMap không an toàn theo chuỗi và không được đồng bộ hóa. Nó không cho phép các giá trị trùng lặp nhưng nó cho phép các giá trị rỗng. Để thêm các phần tử trong Hashmap, phương thức put() chấp nhận một khóa và một giá trị.
Cú pháp của nó là:
public Object put(Object key, Object value)
Ví dụ:
HashMap<Integer, String> vehicleHashMap = new HashMap<Integer, String>();
vehicleHashMAp.put( 1, “Car” );
vehicleHashMAp.put( 2, “Motorcycle” );
vehicleHashMAp.put( 3, “Bus” );
>>> Đọc thêm: Giới thiệu Design Pattern trong Java và tìm hiểu các loại Design Pattern
Sự khác biệt giữa HashSet và HashMap trong Java
Chúng ta sẽ thảo luận sự khác biệt với một tham số cụ thể
Triển khai hệ thống phân cấp
HashSet triển khai giao diện Set của Java trong khi HashMap thực hiện giao diện Map. Giao diện Set mở rộng giao diện Collection là giao diện cấp cao nhất của Collection framework trong Java, trong khi giao diện Map không mở rộng bất kỳ giao diện nào.
Cách lưu trữ dữ liệu của HashMap và HashSet trong Java
HashSet lưu trữ dữ liệu dưới dạng các đối tượng, trong khi HashMap lưu trữ dữ liệu dưới dạng các cặp khóa - giá trị. Trong HashMap, chúng ta có thể truy xuất từng giá trị bằng cách sử dụng khóa.
Ví dụ:
HashSet<String> hs = new HashSet<String>();
hs.add(“Java”);
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(1, “Java”);
>>> Tham khảo: Khóa học lập trình Java
Nhân bản giá trị trong Hashmap và HashSet trong Java
HashSet không cho phép bạn thêm các giá trị trùng lặp. Nhưng hashmap lưu trữ các cặp khóa - giá trị và cho phép các khóa trùng lặp nhưng không trùng lặp giá trị. Nếu chúng ta thêm khóa trùng lặp, thì khóa đó sẽ sử dụng giá trị mới với khóa đó.
Giá trị rỗng - Null trong Hashmap và HashSet trong Java
HashSet cho phép một giá trị null sau khi thêm giá trị null, HashSet không cho phép thêm nhiều giá trị null. Mặt khác, HashMap cho phép nhiều giá trị null nhưng chỉ có một khóa Null.
Phương thức chèn phần tử HashMap và HashSet trong Java
Có các phương thức được xác định trước cho cả HashSet và HashMap để lưu trữ hoặc thêm các phần tử. Phương thức add() thêm các phần tử trong HashSet trong khi phương thức put() thêm hoặc lưu trữ các phần tử trong một HashMap. Trong khi sử dụng phương thức add, chúng ta truyền trực tiếp giá trị dưới dạng một đối tượng. Nhưng khi sử dụng phương thức put (), chúng ta cần truyền khóa cũng như giá trị để thêm phần tử trong một HashSet.
>>> Đọc thêm: Khám phá cách tránh lỗi ConcurrentModificationException trong Java
Hiệu suất của HashMap và HashSet trong Java
Tốc độ của HashSet chậm hơn HashMap. Lý do mà HashMap nhanh hơn HashSet là HashMap sử dụng các khóa duy nhất để truy cập các giá trị. Nó lưu trữ mỗi giá trị bằng một khóa tương ứng và chúng ta có thể truy xuất các giá trị này nhanh hơn bằng cách sử dụng khóa trong trình lặp. Trong khi HashSet hoàn toàn dựa trên các đối tượng và do đó việc truy xuất giá trị chậm hơn.
Bảng so sánh HashSet và HashMap trong Java
Tham số |
HashSet |
HashMap |
Thực thi |
Giao diện set |
Giao diện Map |
Lưu trữ |
Các đối tượng |
Các cặp khóa - giá trị |
Nhân bản giá trị |
HashSet không cho phép các giá trị trùng lặp |
HashMap cho phép các khóa trùng lặp nhưng không cho phép các giá trị trùng lặp |
Giá trị Null |
Cho phép một giá trị Null |
Cho phép một khóa null nhưng nhiều giá trị null |
Phương thức chèn phần tử |
Chúng ta sử dụng phương thức add() để chèn các phần tử trong HashSet |
Chúng ta sử dụng phương thức put () để chèn các phần từ trong HashMap |
Số đối tượng |
Chúng ta chỉ có thể tạo một đối tượng trong quá trình thêm các phần tử |
Chúng ta tạo hai đối tượng trong quá trình thêm các đối tượng |
Hiệu suất |
Chậm hơn |
Nhanh hơn |
Cách dùng |
Sử dụng HashSet để duy trì tính duy nhất của dữ liệu |
Sử dụng HashMap là khi tính duy nhất của dữ liệu không con nhiều quan trọng |
Khi nào sử dụng HashSet và HashMap trong Java
Chúng ta nên sử dụng HashSet hơn là HashMap khi chúng ta muốn duy trì tính duy nhất trong đối tượng Collection. Trong tất cả các trường hợp khác, chúng ta nên sử dụng HashMap thay thì HashSet vì hiệu suất của nó tốt hơn HashSet.
Kết luận:
Trong bài viết này, chúng ta đã thảo luận về mọi sự khác biệt giữa HashSet và HashMap. Chúng ta sử dụng cả hai như một lớp Collection trong Java. HashSet triển khai giao diện set và hoạt động nội bộ nhớ HashMap trong khi HashMap triển khai giao diện Bản đồ. Trên đây là một số so sánh Hashmap với HashSet trong Java, hy vọng đã hiểu rõ hơn về cả hai phương thức. Tìm hiểu thêm về Java và các ngôn ngữ lập trình khác qua các khóa học lập trình tại T3H.