2009-08-07 34 views
19

Tôi khá mới để Java và trong một câu hỏi khác Stack Overflow về for loops một câu trả lời cho biết rằng có hai công dụng của định trong Java:Sử dụng 'for' trong Java

for (int i = 0; i < N; i++) { 
} 


for (String a : anyIterable) { 
} 

Tôi biết việc sử dụng đầu tiên của và đã sử dụng nó rất nhiều, nhưng tôi chưa bao giờ thấy cái thứ hai. Nó được sử dụng để làm gì và khi nào tôi sẽ sử dụng nó?

Trả lời

33

Đầu tiên trong số hai bạn chỉ định là vòng lặp C for cổ điển. Điều này cho phép các lập trình viên kiểm soát các tiêu chí lặp lại và cho phép ba hoạt động: khởi tạo; kiểm tra vòng lặp; biểu thức tăng dần. Mặc dù nó được sử dụng thường xuyên để từng bước lặp lại cho một số thiết lập của những nỗ lực, như trong ví dụ Yor:

for (int i=0; i < N : i++) 

Có rất nhiều trường hợp hơn trong mã nơi for đã sử dụng để lặp qua các bộ sưu tập:

for (Iterator iter = myList.iterator(); iter.hasNext();) 

Để giảm bớt sự sắp xếp kiểu thứ hai (khi mệnh đề thứ ba thường không được sử dụng), và để khen Generics được giới thiệu trong Java 1.5, phần thứ hai trong hai ví dụ của bạn - tăng cường cho vòng lặp hoặc for-each loop - đã được giới thiệu.

Thứ hai được sử dụng với mảng và bộ sưu tập Chung. See this documentation. Nó cho phép bạn lặp qua một bộ sưu tập chung, nơi bạn biết loại Collection, mà không cần phải đưa kết quả của Iterator.next() đến một loại đã biết.

Hãy so sánh:

for(Iterator iter = myList.iterator; iter.hasNext() ;) { 
    String myStr = (String) iter.next(); 
    //...do something with myStr 
} 

với

for (String myStr : myList) { 
    //...do something with myStr 
} 

này 'kiểu mới' cho vòng lặp có thể được sử dụng với mảng cũng như:

String[] strArray= ... 
for (String myStr : strArray) { 
    //...do something with myStr 
} 
+0

Hoặc mảng. Hoặc thu thập thông thường nếu biến của bạn thuộc loại Object :-) – ChssPly76

+3

Nó không dành riêng cho các bộ sưu tập chung. –

+0

@pavel - tôi sẵn sàng làm cho câu trả lời này thành wiki nếu bạn muốn thêm vào nó. – akf

1

Nó được sử dụng để lặp qua một toàn bộ mảng hoặc bộ sưu tập Iterable. Về cơ bản nó thay thế:

for(int i=0; i<N.length; i++) 

Và có thể được sử dụng với Generics là khá mát mẻ

4

Các "tại" vòng lặp là chủ yếu eye-candy mà làm cho mã dễ đọc hơn. (Nếu bạn phát âm: là "in").

Tôi sử dụng loại thứ hai gần như độc quyền trong mã của riêng mình bất cứ khi nào tôi đang lặp qua danh sách hoặc mảng.

Tôi vẫn sử dụng vòng lặp thông thường khi xử lý hầu hết mã toán học hoặc khi tôi cần "i" để xem số lần tôi đã lặp lại.

1

Nó được gọi là cho mỗi vòng lặp và về cơ bản, nó có thể được sử dụng với bất cứ điều gì mà thực hiện

java.lang.Iterable 

bộ sưu tập Generic thực hiện giao diện này, nhưng bạn có thể làm cho lớp của riêng bạn mà đã là tốt. Nó làm cho giao dịch với mọi thứ trong một danh sách/bộ sưu tập rất dễ dàng mặc dù nhược điểm là bạn không nhận được quyền truy cập rõ ràng vào số hiện tại trong danh sách giống như bạn làm trong vòng lặp truyền thống.Có một số chi phí bổ sung liên quan đến loại vòng lặp này trên các vòng lặp truyền thống vì các cuộc gọi đến các lớp lặp.

0

Cả hai đều giống nhau về chức năng, nhưng cho (String a: anyIterable) {}, dễ đọc hơn, ít đánh máy hơn và ngắn hơn. for (int i = 0; i < N: i ++) chỉ số bộ sưu tập, bằng cách điều khiển vòng lặp biến icho (String a: anyIterable) {} không lập chỉ mục bộ sưu tập

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