Các phần tử trong HashSet không có thứ tự, vì vậy có thể các bạn sẽ gặp trường hợp là mỗi vòng lặp lại có một thứ tự các phần tử khác nhau. Để duyệt HashSet chúng ta sử dụng các cách sau:
- Sử dụng Iterator
- Vòng lặp for
Iterator HashSet
import java.util.HashSet; import java.util.Iterator; public class Main { public static void main(String[] args) { // Create a HashSet HashSet<String> hset = new HashSet<String>(); //add elements to HashSet hset.add("hai"); hset.add("ha"); hset.add("hieu"); hset.add("tim"); hset.add("chanh"); Iterator<String> it = hset.iterator(); while (it.hasNext()) { System.out.print(it.next() + " "); } } }
Output: hai hieu chanh ha tim
Vòng lặp trong HashSet
import java.util.HashSet; import java.util.Iterator; public class Main { public static void main(String[] args) { // Create a HashSet HashSet<String> hset = new HashSet<String>(); //add elements to HashSet hset.add("hai"); hset.add("ha"); hset.add("hieu"); hset.add("tim"); hset.add("chanh"); for(String t : hset) { System.out.print(t + " "); } } }
Output: hai hieu chanh ha tim
Note
Như 2 ví dụ trên thì chúng ta thấy chuỗi kết quả nó trả về không đúng với thứ tự mà chúng ta thêm vào. Nên đừng bao giờ thực hiện các phép tính bị ảnh hưởng với thứ tự trong HashSet. Các bạn sẽ bị lỗi sometimes đấy.
Một kinh nghiệm mình có HashSet các object chỉ chứa đúng 2 phần tử, khi mình biết unit test cho method A() mình chỉ muốn xử lý phần tử đầu tiên trong HashSet, thế nên mình đã gọi hset.iterator().next(); truyền vào hàm A() và so sánh kết quả. Sau đó mình gặp trường hợp lúc đúng đúng sai, debug một hồi mới thấy là nó truyền radom các bạn ạ! Mất gần máy tiếng!!! thế nên các bạn chú ý nghen.