Vòng lặp trong HashSet với ví dụ cụ thể

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.

Leave a Comment

Your email address will not be published. Required fields are marked *