Java 基礎(六):迴圈
阿新 • • 發佈:2020-03-20
### 迴圈
老生常談的一個控制流程了,我們在是使用陣列和集合的時候,遍歷元素的時候經常會用到迴圈的結構,Java具有非常靈活的三種迴圈機制:
![image-20190827222828453](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-27-142828.png)
根據是否知道迴圈的次數可以為分為while迴圈,do...while迴圈和for迴圈,下面我們單獨來了解一下:
### while迴圈
當我們不知道迴圈的具體次數時,可以使用while迴圈進行操作,下面是while迴圈的虛擬碼
```java
定義初始變數
while (控制條件) {
迴圈體
}
```
![image-20190827222337726](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-27-142337.png)
程式碼示例:
```java
// 定義控制迴圈變數
int start = 0;
// 迴圈條件
while (start < 2) {
// 迴圈體
System.out.println("1");
// 改變控制迴圈變數
start++;
}
}
```
### do...while迴圈
和while迴圈類似,do...while迴圈同樣適用於不知道迴圈具體的次數時,但是和while迴圈不太一樣的是,如果控制迴圈的變數初始時就不符合迴圈條件,那麼迴圈體一次也不會執行,而do...while迴圈至少會把迴圈體執行一次。
```java
定義初始變數
do {
迴圈體
} while (迴圈條件);
```
![image-20190827223154870](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-27-143155.png)
程式碼示例:
```java
// 定義控制迴圈變數
int start = 0;
do {
// 迴圈體
System.out.println("1");
// 控制迴圈變數
start++;
// 迴圈條件
} while(start < 0);
```
### for迴圈
下面進入了我們的重頭戲,日常中使用的最多的for迴圈,由於普通for迴圈可以準確的控制迴圈的次數,所以一般當我們在需要手動控制迴圈次數的時候,我們會使用普通for迴圈
```java
for(定義初始變數;判斷條件;變數變化){
迴圈體
}
```
這裡的流程圖和while是類似的,下面我們來看一下如何遍歷一個數組:
```java
int[] a = {1,2,3,4};
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
```
同樣的遍歷一個集合也可以使用普通for迴圈:
```java
List list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
```
這裡細心的同學可能已經注意到了,我們這裡描述的時候一直使用的是普通for迴圈,那麼既然有普通的for迴圈,就一定有不普通的for迴圈,下面我們來看一下兩種不太普通的for迴圈
#### 增強for迴圈
在JDK 5之後,出現了一種語法糖--forEach迴圈,也稱之為增強for迴圈,迴圈語法如下
```java
for(資料型別 定義元素名:迴圈列表) {
迴圈體
}
```
foreach語句是for語句的特殊簡化版本,但是foreach語句並不能完全取代for語句,然而,任何的foreach語句都可以改寫為for語句版本。 foreach並不是一個關鍵字,習慣上將這種特殊的for語句格式稱之為“foreach”語句。
#### 關於增強for迴圈和普通for迴圈的效率問題
陣列遍歷:增強型for迴圈和普通迴圈遍歷原理相同,效率相同。
集合遍歷:增強型for迴圈的遍歷其本質就是迭代器 iterator的遍歷,和普通迴圈遍歷相比,各自有自己適用的場景,比如說普通for迴圈比較適合List類(陣列類)遍歷通過下標查詢資料的,而增強型for迴圈則比較適合**連結串列**結構的集合的遍歷。
在**資料量較大**的情況下,如果是集合使用增強for迴圈的效率會低於使用普通for迴圈。
### 跳出迴圈的兩個關鍵字
我們在使用的過程中,如果遇到需要中斷一個流程的情況,通常會使用到以下兩個關鍵字:`break`和`continue`。
`break` 主要用在迴圈語句或者 switch 語句中,用來跳出整個語句塊。break 跳出最裡層的迴圈,並且繼續執行該迴圈下面的語句。當然我們也可以使用標籤的方式來跳出某個指定的迴圈。
```java
read_data:
while(...) {
for(...) {
break read_data; //這裡就是直接跳出了while迴圈
}
}
```
`continue` 適用於**任何迴圈控制結構**中。作用是讓程式立刻**跳轉到下一次迴圈**的迭代。在 for 迴圈中,`continue` 語句使程式立即跳轉到更新語句。在 while 或者 do…while 迴圈中,程式立即跳轉到布林表示式的判斷語句。當然,`continue`也有一種帶標籤的形式,將跳到與標籤匹配的迴圈首部。用法和break一樣,這裡就不再舉例說明。
### 公眾號
![](http://viyoungblog.oss-cn-beijing.aliyuncs.com/viyoung/2020-03-15-qrcode_for_gh_a65beceb0947_