目前先簡單使用認識迭代器,留坑,后續深入了解
迭代器
從集合篇了解到,Java集合容器的種類有很多種,ArrayList、LinkedList、HashSet...,每種容器都有自己的特點,ArrayList底層維護的是一個數組;LinkedList是鏈表結構的;HashSet依賴的是哈希表,每種容器都有自己特有的數據結構。
因為容器的內部結構不同,很多時候可能不知道該怎樣去遍歷一個容器中的元素。所以為了使對容器內元素的操作更為簡單,Java引入了迭代器模式!
把訪問邏輯從不同類型的集合類中抽取出來,從而避免向外部暴露集合的內部結構。
Iterator
Iterator iterList = li.iterator();
while(iterList.hasNext()){System.out.println(iterList.next());
}
- 最強大的迭代器
- 它是一個接口類型,它不關心集合或數組的類型
- 隨時能修改和刪除元素
- 能將遍歷的操作與序列底層的結構分離,隨時能換另一個遍歷對象,降低了耦合性
java迭代、這里之所以可以在遍歷過程中刪除元素而不影響索引,是需要使用接口自己的移除方法,否則還是會報錯
Foreach
for(int i :arr){System.out.println(i);
}
- 最方便的迭代器
- 需要先知道集合的類型,即需要訪問內部的成員
- 失去了索引信息
迭代效率
- 對于小數量級的數據(一萬以下),差別不大甚至for循環更快
- 對于大數量級的數據,用iterator或foreach更快
- 對于數組集合來說,三者差不多,foreach效率稍快
- 對于鏈表集合來說,foreach和iterator效率一樣快,但是for最慢