【Kotlin】循环控制流 ( for 循环 | Iterator 遍历形式 | Iterator 遍历要求 | IntArray 源码解析 )
文章目錄
- 一、For 循環(huán)
- 二、For 循環(huán)遍歷 Iterator 對象
- 三、Iterator 遍歷要求
- 四、IntArray 源碼解析
一、For 循環(huán)
For 循環(huán)有兩種遍歷形式 :
- 一種是 遍歷提供了迭代器 ( Iterator ) 的對象 ;
- 另一種是 使用區(qū)間表達式進行遍歷 ;
二、For 循環(huán)遍歷 Iterator 對象
提供了 Iterator 迭代器的對象基本就是 集合 或者 數(shù)組 對象 ,
遍歷格式 : for ( 元素 in 集合/數(shù)組對象 ){ 遍歷內容 }
代碼示例 :
fun main() {// Kotlin 集合var list : List<Int> = listOf<Int>(0, 1, 2, 3, 4)// Kotlin 數(shù)組var array : IntArray = intArrayOf(5, 6, 7, 8, 9)println("遍歷集合")// 遍歷集合for(i in list){println(i)}println("\n遍歷數(shù)組")// 遍歷數(shù)組for(i in array){println(i)} }執(zhí)行結果 :
遍歷集合 0 1 2 3 4遍歷數(shù)組 5 6 7 8 9三、Iterator 遍歷要求
使用 for(i in array) 對 array 對象進行遍歷 , 有以下要求 :
- 被遍歷的對象必須 定義了 iterator() 方法 , 返回 Iterator 迭代器類型 , 并且該方法必須 標記為 operator ;
- Iterator 迭代器必須有 next() 函數(shù) , 并且該方法必須 標記為 operator ;
- Iterator 迭代器必須有 hasNext() 函數(shù) , 返回 Boolean 類型 , 并且該方法必須 標記為 operator ;
interface Iterator 接口 自帶的 next() , hasNext() : Boolean 兩個方法 本身就滿足上述要求 ;
四、IntArray 源碼解析
下面針對 IntArray 進行分析 ;
在下面的 IntArray 中提供了 public operator fun iterator(): IntIterator 方法 , 提供了一個 Iterator 迭代器 , 該 IntIterator 實現(xiàn)了 Iterator 接口 ;
該 iterator() 方法有 operator 修飾 ;
/*** Int 類型數(shù)組 ;* 在 Java 虛擬機中 , 該對象會被當做 int[] 對象 ; * @constructor 創(chuàng)建一個 size 大小的數(shù)組 , 其初始值默認都為 0 ; */ public class IntArray(size: Int) {/*** 創(chuàng)建一個數(shù)組 , 指定大小為 size , * 每個元素的值通過調用特殊的 (Int) -> Int 類型的 函數(shù) / Lambda 表達式 進行計算 ; * * init 函數(shù)調用順序 : 從第一個元素開始調用 , 按照元素順序執(zhí)行 ; * init 函數(shù)應該返回對應元素索引的元素值大小 ; */public inline constructor(size: Int, init: (Int) -> Int)/*** 返回 index 索引位置的元素值 , 該方法可以使用索引操作符調用 [] ; * 如果索引超出邊界 , 會拋出數(shù)組越界異常*/public operator fun get(index: Int): Int/*** 設置 index 索引的值 , 可以使用索引操作符 [] 進行操作 ; * 如果索引超出邊界 , 會拋出數(shù)組越界異常*/public operator fun set(index: Int, value: Int): Unit/** 返回數(shù)組元素個數(shù). */public val size: Int/** 為數(shù)組元素創(chuàng)建一個迭代器 . 注意此處的 iterator() 方法有 operator 標記 ★ */public operator fun iterator(): IntIterator }
下面是 IntIterator 的源碼 , 其 實現(xiàn)了 Iterator 接口 ;
/** Int 類型值序列的迭代器 , 用于迭代獲取 Int 類型 ; */ public abstract class IntIterator : Iterator<Int> {override final fun next() = nextInt()/** 返回序列中的下一個 Int 值 */public abstract fun nextInt(): Int }
Iterator 接口中的 next() 和 fun hasNext(): Boolean , 有 operator 修飾 , 因此只要在對象中定義的 iterator() 方法返回該接口實現(xiàn)類 , 并且使用 operator 修飾該方法 , 即可使用 for 循環(huán)遍歷該對象 ;
/*** 集合或者其它對象的迭代器可以當做一個元素序列 ; * 通過該迭代器, 可以按照順序遍歷元素 ; */ public interface Iterator<out T> {/*** 返回迭代器的下一個值 * 注意此處的 next() 方法有 operator 標記 ★*/public operator fun next(): T/*** 如果有下一個元素 , 返回 true* 注意此處的 hasNext() 方法有 operator 標記 ★*/public operator fun hasNext(): Boolean }
總結
以上是生活随笔為你收集整理的【Kotlin】循环控制流 ( for 循环 | Iterator 遍历形式 | Iterator 遍历要求 | IntArray 源码解析 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 异步操作】Timer
- 下一篇: 【Kotlin】Kotlin 自定义组件