好的,下面是 Java、Python 和 Go 语言常用循环结构的比较表格:
**Java, Python, Go 常用循环结构比较**
| | | | | |
| -------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| **循环类型 (Loop Type)** | **Java** | **Python** | **Go** | **备注 (Remarks)** |
| **条件循环 (前置检查)** <br> (Condition-Based, Pre-check) | `while (condition) {... }` | `while condition:...` | `for condition {... }` | 功能类似 `while`。Go 使用 `for` 关键字实现。|
| **计数/索引循环** <br> (Counter/Index-Based) | `for (int i = 0; i < n; i++) {... }` | `for i in range(n):...` <br> 或 `range(start, stop, step)` | `for i:= 0; i < n; i++ {... }` | 经典的三段式 `for` 循环。Python 使用 `range()` 函数生成序列。Go 也是用 `for` 关键字。|
| **集合/范围迭代 (For-Each)** <br> (Collection/Range Iteration) | `for (Type item: collection) {... }` | `for item in iterable:...` | `for index, value:= range collection {... }` <br> (可省略 index 或 value) | 用于遍历数组、列表、切片、映射、字符串等。Python 的 `for...in` 最通用。Go 的 `range` 返回索引/键和值。|
| **无限循环** <br> (Infinite Loop) | `while (true) {... }` <br> 或 `for (;;) {... }` | `while True:...` | `for {... }` | 都需要配合 `break` 语句来退出循环。|
| **循环控制 - 跳出循环** <br> (Loop Control - Exit Loop) | `break;` <br> (可带标签 `break label;`) | `break` | `break` <br> (可带标签 `break label;`) | 立即终止当前循环。Java 和 Go 支持标签跳转,可跳出多层嵌套循环。|
| **循环控制 - 跳过当前迭代** <br> (Loop Control - Skip Iteration) | `continue;` <br> (可带标签 `continue label;`) | `continue` | `continue` <br> (可带标签 `continue label;`) | 跳过当前迭代的剩余部分,开始下一次迭代。Java 和 Go 支持标签跳转。|
| **循环控制 - 正常结束后的代码块** <br> (Loop Control - Else Clause) | 无 | `else:` <br> (在循环未被 `break` 终止时执行) | 无 | Python 独有的 `else` 子句,在循环自然结束(非 `break` 退出)时执行。|
**总结:**
- **Java:** 提供了经典的 `for`、`while`、`do-while` 以及增强 `for` 循环。
- **Python:** 主要依赖 `for...in` (非常灵活,配合 `range`, `enumerate` 等) 和 `while`。没有 `do-while`,但有独特的循环 `else` 子句。
- **Go:** 只有一个 `for` 关键字,但通过不同的写法实现了传统 `for`、`while`、无限循环和 `range` 迭代的功能。没有 `do-while`。