2009-10-09 38 views
11

Tôi có một LinkedList trong Java, một trình vòng lặp để duyệt danh sách và tôi muốn sao chép trình lặp để thực hiện một số xử lý tạm thời "nhìn về phía trước" của danh sách liên quan đến vị trí của trình lặp ban đầu.Nhân bản vòng lặp trong Java

Tôi hiểu rằng nhân bản một trình lặp là không thể trong mọi tình huống, nhưng có cách nào để sao chép một trình lặp vào một LinkedList (hoặc lưu và khôi phục trạng thái của nó) không?

Trả lời

11

Nó sẽ là có thể nhưng Sun đảm bảo rằng bạn không thể (bằng cách làm cho lớp học tư nhân).

Nhưng có thể bạn có thể đạt được những gì bạn muốn bằng cách sử dụng một listIterator() thay vì một đồng bằng iterator(). A ListIterator có thể di chuyển theo cả hai hướng.

+0

Đó là ok. Tôi sẽ lưu số bước trước rồi quay lại số bước đó để khôi phục trạng thái. –

1

Với ListIterator bạn có thể lưu chỉ mục của phần tử tiếp theo và có thể nhận được ListIterator mới dựa trên chỉ mục đó.

Something như thế này (Java 1.5 chẳng hạn):

LinkedList<Integer> list = new LinkedList<Integer>(); 
ListIterator<Integer> lit = list.listIterator(0); 
<<do something here >> 
int index = lit.nextIndex(); 
ListIterator<Integer> litclone = list.listIterator(index); 
+7

Nhưng nhận được một iterator từ chỉ mục sẽ có nghĩa là để duyệt danh sách một lần nữa từ đầu. Dường như với tôi một cách rất đắt tiền để tạo ra một bản sao của những gì, về cơ bản, một con trỏ trong các ngôn ngữ khác như C++ với thư viện chuẩn. –

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