遍歷方式有以下幾種:
1. for 循環(huán)遍歷,基于計數(shù)器。在集合外部維護一個計數(shù)器,然后依次讀取每一個位置的元素,當讀取到最后一個元素后停止。
2. 迭代器遍歷,Iterator。Iterator 是面向對象的一個設計模式,目的是屏蔽不同數(shù)據(jù)集合的特點,統(tǒng)一遍歷集合的接口。Java 在 Collections 中支持了 Iterator 模式。
3. foreach 循環(huán)遍歷。foreach 內部也是采用了 Iterator 的方式實現(xiàn),使用時不需要顯式聲明 Iterator 或計數(shù)器。優(yōu)點是代碼簡潔,不易出錯;缺點是只能做簡單的遍歷,不能在遍歷過程中操作數(shù)據(jù)集合,例如刪除、替換。
最佳實踐:Java Collections 框架中提供了一個 RandomAccess 接口,用來標記 List 實現(xiàn)是否支持 Random Access。
1. 如果一個數(shù)據(jù)集合實現(xiàn)了該接口,就意味著它支持 Random Access,按位置讀取元素的平均時間復雜度為 O(1),如ArrayList。
2. 如果沒有實現(xiàn)該接口,表示不支持 Random Access,如LinkedList。
3. 推薦的做法就是,支持 Random Access 的列表可用 for 循環(huán)遍歷,否則建議用 Iterator 或 foreach 遍歷。