2011-12-07 38 views
5

tôi có một danh sách:Danh sách vs Danh sách iterator

List<Object> myList = new ArrayList<Object>(); 

Để có được từ danh sách này có hai phương pháp:

1.

for(Object obj : myList) 
{ 
    // some code 
} 

2.

Iterator<Object> objIt = myList.iterator(); 
while(obj.hasNext()) { 
    Object obj = (Object)objIt.next(); 
    // some code 
} 

Câu hỏi của tôi là câu hỏi nào là bộ nhớ hiệu quả và lặp lại nhanh ?

+0

Bạn có ý nghĩa gì khi nói "để nhận được điều đó"? –

+1

http://stackoverflow.com/questions/2113216/which-is-more-efficient-a-for-each-loop-or-an-iterator –

+0

Vui lòng sử dụng tìm kiếm trước khi đặt câu hỏi. Nhiều câu hỏi đã được hỏi và trả lời ở đây trên Stack Overflow. Bản sao của: http://stackoverflow.com/questions/2113216/which-is-more-efficient-a-for-each-loop-or-an-iterator –

Trả lời

12

Họ làm điều tương tự - vòng lặp nâng cao for chỉ là cú pháp đường cho phiên bản dài (cho vòng lặp; đối với mảng hơi khác một chút). Trừ khi bạn cần trình vòng lặp một cách rõ ràng (ví dụ: để gọi remove()), tôi sẽ sử dụng phiên bản đầu tiên.

Xem section 14.14.2 of the Java Language Specification để biết thêm chi tiết về phép chuyển đổi chính xác do trình biên dịch thực hiện.

+1

Tôi sắp đưa ra câu trả lời tương tự. (Ngoại trừ phần 14 ... một phần.) 1 cho tốc độ. –

+0

Giao diện Iterable (http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html) nói rằng được thiết kế cho vòng lặp nâng cao. Chỉ muốn chỉ ra tham chiếu rằng chúng giống hệt nhau. – pimaster

2

Người đầu tiên là những gì bạn gọi là "tăng cường cho vòng lặp" mà đã được giới thiệu trong JDK 1.5 +

Đó là cách thuận tiện hơn iterating thông qua một danh sách. Ngoài ra, bạn không cần phải làm đúc rõ ràng nếu bạn đang sử dụng đó.

Từ quan điểm hiệu suất, tôi không nghĩ rằng không có nhiều sự khác biệt giữa hai.

1

Tăng cường cho vòng lặp được sử dụng vòng lặp chỉ bên trong nó. Vì vậy, cả hai đều giống nhau.

1

Đầu tiên rõ ràng hơn, nhưng nếu bạn muốn loại bỏ các phần tử trong khi truy cập danh sách, lựa chọn duy nhất của bạn là một trình lặp.

2

Iterator: Nó cung cấp cho bạn những kết quả khi cần thiết và không được tất cả các kết quả trong bộ nhớ

3

Sử dụng một Iterator là nhiều truy cập tiết kiệm đến List từ bên ngoài xác định class như bạn không thể vô tình ghi đè lên toàn bộ List chẳng hạn. Bạn chỉ có thể truy cập một phần tử tại một thời điểm: phần tử hàng đầu.

Vì vậy, hướng dẫn chúng tôi sử dụng là chỉ sử dụng cách tiếp cận for each bên trong lớp xác định và bất cứ khi nào Danh sách cần được truy cập từ bên ngoài một trình lặp phải được sử dụng. Điều này cũng thực thi khái niệm giữ logic về cách sửa đổi một thành viên bên trong class có chứa nó. Tất cả các hoạt động phức tạp cần thiết bên ngoài phải được triển khai trong các phương thức public bên trong đó class.

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