2013-03-12 33 views
5

Máy biến lặp chắc chắn phải biết về bộ sưu tập mà nó phải lặp lại. Bộ sưu tập cũng phải biết về trình phát lặp của nó không? Là phụ thuộc một cách hay cả hai cách? Nếu bộ sưu tập có kiến ​​thức về việc thực hiện một trình lặp cụ thể thì có thể không có các chiến lược trình lặp khác nhau cho cùng một bộ sưu tập. Đây là suy nghĩ của tôi. Tôi đã đúng hay tôi đã làm cho nó hoàn toàn sai?Có sự phụ thuộc vòng tròn giữa bộ sưu tập và trình lặp của nó không?

Các GOF cuốn sách có sơ đồ này cho mô hình Iterator:

enter image description here

Tôi nghĩ rằng nó ngụ ý một sự phụ thuộc tròn. Tôi không chắc chắn về các đường chấm chấm từ List đến LisIteratorSkipList đến SkipListIterator.

P.S: Tôi xử lý Java hàng ngày nhưng có thể là câu hỏi thiết kế nhiều hơn là cụ thể cho một ngôn ngữ cụ thể.

+1

Bạn đã xem mã nguồn cho các bộ sưu tập của Java để xem chúng đã làm như thế nào? Điều đó có lẽ sẽ cho một số hiểu biết sâu sắc về câu hỏi thiết kế của bạn. –

+0

Trong C++ người ta có thể sử dụng: std :: vector :: iterator Mà làm cho tôi giả sử vector có một không gian tên chứa iterator. –

+1

Có, có, và không sao. Vấn đề là giao diện * lặp * tóm tắt từ cách lặp qua bộ sưu tập. Việc lặp * thực hiện * xử lý việc này. Về cơ bản, bạn có thể xem xét việc thực hiện trình vòng lặp như là một phần của việc thực hiện bộ sưu tập. Điều quan trọng là không có sự phụ thuộc như vậy giữa các giao diện. (Tức là bạn không cần phải quan tâm đến loại bộ sưu tập nào, nếu nó thậm chí là một bộ sưu tập, một 'Iterator' đã cho hoạt động.) – millimoose

Trả lời

2

Đối với tất cả trừ một số triển khai chuyên biệt, bộ sưu tập không cần biết về trình lặp.

Đường chấm chấm trong trường hợp này biểu thị sự khởi tạo. Nếu bạn có băng nhóm 4 cuốn sách, lời giải thích được đưa ra ở trang 15, mục 1.6.

Cụ thể, một trình lặp được tạo bởi phương thức CreateIterator, trong trình lặp Java().

Geek Humor: nói với mọi người tên Jersey Shore của bạn là "THE INSTANTATION"

+0

Điều gì sẽ là những triển khai chuyên biệt. Bạn có thể ném một ví dụ? – Geek

1

Không, nó không phải là cyclic bởi sự cần thiết. Điều này được làm rõ bởi thực tế là bạn có thể thực hiện một trình lặp mới cho một cấu trúc dữ liệu đã cho bất cứ lúc nào. Ví dụ, nếu bạn cần một iterator đầu tiên sản lượng các phần tử được đánh số chẵn của một ArrayList theo thứ tự tăng dần và sau đó các mục được đánh số lẻ theo thứ tự giảm dần, không có gì có thể chặn bạn chỉ viết những thứ đó.

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