2010-05-10 30 views
5

Trong C + người ta có thể sử dụng trình lặp để ghi vào một chuỗi. Ví dụ đơn giản nhất sẽ là:Có một trình vòng lặp có thể ghi trong Java không?

vector<int> v; 
for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it) { 
    *it = 42; 
} 

Tôi cần điều gì đó phức tạp hơn - hãy tiếp tục làm thành viên của lớp để sử dụng sau này. Nhưng tôi không biết làm thế nào để có được hành vi này từ các trình lặp Java.

Có các trình vòng lặp có thể ghi trong Java không?
Nếu không thì điều gì sẽ thay thế chúng?

Trả lời

8

ListIterator (bạn có thể có được bằng List#listIterator()) có các phương pháp add()set() cho phép bạn chèn và thay thế tương ứng mục tại chỉ mục hiện đang được lặp lại. Đó là "trình vòng lặp" duy nhất có thể ghi được như tôi có thể nghĩ đến trong Java.

Không chắc chắn nếu đó là thay thế chính xác mã C++ đã cho vì tôi không biết C++.

+0

Cảm ơn. Có bất cứ điều gì như thế cho mảng? –

+2

@Lukasz: Bạn có thể biến một mảng thành một List (trong thời gian không đổi) với 'Arrays.asList' và sau đó lấy một ListIterator từ đó. – sepp2k

+1

Không, bạn nên chọn 'Danh sách' trên mảng. 'List' là trừu tượng Java của một mảng và bạn có thể sử dụng' ArrayList' để có một mảng động có thể mở rộng. Để tìm hiểu thêm về 'Danh sách' (là một phần của API Bộ sưu tập Java), hãy xem [Hướng dẫn về chủ đề mặt trời] (http://java.sun.com/docs/books/tutorial/collections/index.html). – BalusC

2

Vì mảng có thể được truy cập trực tiếp và nhanh chóng theo chỉ mục của chúng, bạn không thực sự cần một đối tượng trình lặp. Nó sẽ không đủ để lưu chỉ mục của mảng trong thành viên lớp đó? Điều này sẽ cho phép đọc và ghi giá trị của mảng.

PS: Bạn có thể sử dụng ArrayList, một tập hợp mảng tự động ngày càng tăng và sử dụng ListIterator như Balus được mô tả để sử dụng phương pháp tiếp cận đối tượng iterator.

+0

Để đặt giá trị int sẽ không đủ. Tôi cần cả int và mảng. –

0

Có vẻ như bạn muốn có một List (hoặc có thể một số bộ sưu tập khác, như Set) hoặc một mảng.

Ngoài ra, bạn chỉ có thể biến nội dung của mình thành có thể thay đổi. Có vẻ ngớ ngẩn cho các số nguyên, nhưng tiếp tục ví dụ của bạn

for (MutableInteger i : CollectionOfMInts) i.setTo(42); 
Các vấn đề liên quan