2009-08-31 29 views
26

nếu tôi làm điều này trong Java:java: bao nhiêu lần là biểu hiện bộ sưu tập được đánh giá trong một "foreach"

for(String s : myCollection.expensiveListGeneration()) 
{ 
     doSomething(); 
} 

là expensiveListGeneration() gọi chỉ một lần tại beggining hoặc trong mỗi lần lặp chu kỳ?

Việc triển khai có phụ thuộc không?

+0

bản sao có thể có của [hiệu quả foreach của Java] (http://stackoverflow.com/questions/904582/java-foreach-efficiency) –

Trả lời

33

vì nó tương đương với việc sử dụng trình lặp, nó tương đương với việc gọi bộ sưu tập '. phương thức iterator(), và nó được gọi một lần.

19

Nó được gọi một lần và không phụ thuộc vào triển khai. Vòng lặp for-each dựa trên giao diện Iterable. Tất cả những gì nó làm là gọi phương thức iterator() của bộ sưu tập ngay khi bắt đầu, và sau đó làm việc với trình lặp đó.

+0

ah, đã trả lời cùng lúc heh :) – Chii

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