2010-09-30 25 views
8

Nếu tôi thiết lập một iterator cho myList:Điều gì xảy ra nếu bạn gọi cùng một trình lặp hai lần trên cùng một bộ sưu tập?

Iterator iter = myList.iterator(); 
while(iter.hasNext()) 
{ 
    MyObj myObj = (MyObj)iter.next(); 
    doPrint(myObj.toString()); 
} 

Và tôi gọi nó là một lần thứ hai:

while(iter.hasNext()) 
{ 
    MyObj myObj = (MyObj)iter.next(); 
    doPrint(myObj.toString()); 
} 

nó sẽ quay trở lại để bắt đầu của bộ sưu tập lần thứ hai tôi gọi nó ?

+6

Tại sao bạn không thử? – Fortega

+0

java.util.ConcurrentModificationException –

Trả lời

8

Giao diện iterator chỉ cung cấp ba phương pháp:

  • hasNext()
  • tiếp theo ()
  • remove()

Vì vậy, không có cách nào để nói với iterator để "thiết lập lại", để "khởi động lại từ bắt đầu "hoặc" quay lại ". Khi nó nằm trên phần tử cuối cùng của chuỗi cơ bản, nó đã thực hiện công việc của nó và không cần phải giữ tham chiếu. Whisper R.I.P và làm cho nó đáp ứng Big GC.

31

iter.hasNext() trong vòng lặp thứ hai sẽ trả lại false ngay lập tức, vì vậy mã bên trong vòng lặp sẽ không được thực thi.

Nếu bạn tạo lại trình lặp, tuy nhiên (theo list.iterator()), lặp lại sẽ được khởi động lại từ đầu.

+0

+1 để rõ ràng về kết quả của cuộc gọi thứ hai tới .iterator(). –

3

Phần thứ hai sẽ không được thực hiện, bởi vì iter.hasNext() trả về false ...

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