2013-09-01 39 views
5

Tôi đang thực hành lặp lại danh sách rồi tôi bị kẹt. Câu hỏi của tôi là, tại sao hai phương pháp này lại cho kết quả khác nhau.Tại sao hai danh sách Iterator này hoạt động khác nhau?

Mã đầu tiên in ra một vòng lặp vô hạn. Trong khi thứ hai, in ra chuỗi tiếp theo trong chỉ mục.

Tôi mới sử dụng java, đây cũng là ngôn ngữ đầu tiên của tôi.

public static void main(String[] args) { 


    String[] hi = {"yo", "wat", "sup"}; 
    List<String> l1 = new ArrayList(Arrays.asList(hi)); 

    while (l1.iterator().hasNext()) { 


     System.out.println(l1.iterator().next()); 
     ; 
    } 
    } 

VS

public static void main(String[] args) { 


    String[] hi = {"yo", "wat", "sup"}; 
    List<String> l1 = new ArrayList(Arrays.asList(hi)); 

    Iterator<String> rator = l1.iterator(); 

    while (rator.hasNext()) { 
     System.out.println(rator.next()); 
    } 
} 

Trả lời

6

l1.iterator(luôn tạo ra một mới iterator. Trong đoạn mã đầu tiên bạn đang tạo một trình lặp mới, loại bỏ nó, tạo lại nó và loại bỏ nó một lần nữa. Vì trình vòng lặp không có cơ hội để kết thúc, bạn sẽ không bao giờ thoát khỏi vòng lặp.

+1

Vì vậy, về cơ bản .iterator là một trình lặp mới mỗi khi phương thức while thực thi? –

+0

@TinLe Vâng, đúng vậy. – hexafraction

0

Trong trường hợp đầu tiên bạn đang tạo một Iterator mới (bắt đầu với phần tử đầu tiên lặp đi lặp lại) mỗi khi bạn kiểm tra điều kiện trong vòng lặp. Và sau đó, bạn tạo thêm chúng trong số println (2 vòng lặp được tạo trên mỗi vòng lặp). Chương trình sẽ hiển thị phần tử đầu tiên ("yo") không ngừng.

Các vấn đề liên quan