91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

for與foreach在遍歷集合時的差別有什么

發布時間:2021-12-10 16:10:33 來源:億速云 閱讀:214 作者:柒染 欄目:大數據

這期內容當中小編將會給大家帶來有關for與foreach在遍歷集合時的差別有什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

雖然遍歷方式的寫法有多種,但是底層無非就是for循環和foreach(迭代器)兩種方式!這兩種遍歷方式都能達到遍歷集合的效果,但是在效率上孰優孰劣?我們先看一段代碼:

 1public static void main(String[] args) {
2   List<String> linkedList = new LinkedList<>();
3   for (int i = 0; i < 100000; i++) {
4      linkedList.add("L1");
5   }
6   long time1 = System.currentTimeMillis();
7   //for遍歷
8   for (int i = 0; i < linkedList.size(); i++) {
9      System.out.println(linkedList.get(i));
10   }
11   long time2 = System.currentTimeMillis();
12   //foreach遍歷
13   for (String s : linkedList) {
14      System.out.println(s);
15   }
16   long time3 = System.currentTimeMillis();
17   System.out.println("for執行時間:" + (time2 - time1));
18   System.out.println("foreach執行時間:" + (time3 - time2));
19}
 

??這次我們創建的是一個LinkedList,通過循環往集合里面寫入了十萬個元素,然后分別通過foreach(迭代器)和for的方式對集合進行遍歷輸出,并且記錄了兩種方式的耗時。那我們先思考一下哪種方式的耗時更長呢?我們看下結果:

??

for與foreach在遍歷集合時的差別有什么  

??我們能看到使用for遍歷的耗時是foreach的好幾倍!如果想知道為什么會有這么大的差距,我們只能通過源碼找答案了!其實差距不是在循環本身,而是在循環內獲取元素的時候!我們先看下使用for循環時的linkedList.get(i) 的實現:

1public E get(int index) {
2    checkElementIndex(index);
3    return node(index).item;
4}
 

??LinkedList的get方法內部先調用了checkElementIndex方法檢查了index參數的合法性,然后調用node(index)方法獲取元素。我們進入node方法:

 1Node<E> node(int index) {
2// assert isElementIndex(index);
3if (index < (size >> 1)) {
4    Node<E> x = first;
5    for (int i = 0; i < index; i++)
6        x = x.next;
7    return x;
8} else {
9    Node<E> x = last;
10    for (int i = size - 1; i > index; i--)
11        x = x.prev;
12    return x;
13}
 

}

??從上面代碼我們能分析出下面幾點特性

1、LinkedListd底層是一個雙向鏈表,可以從頭部遍歷也可以從尾部遍歷,這樣做可以提高獲取元素的效率! 
2、當獲取元素的索引小于集合元素數量的一半,則從隊列頭部開始遍歷直到目標元素!如果大于一半則從隊列尾部開始遍歷直到目標元素! 
3、每次在獲取元素的時候,都需要從隊列頭或者隊列尾部逐個遍歷直到找到目標元素。這也就是為什么使用for循環遍歷LinkedList慢的原因!并且,當集合的元素數量越多,for遍歷與foreach的差距就越大!

??那么如果我們的集合類型是ArrayList,使用for和foreach的差距大嗎?由于ArrayList底層是數組,通過索引獲取數組的效率是非常高的,因此使用for與foreach在效率基本沒太大差別!

上述就是小編為大家分享的for與foreach在遍歷集合時的差別有什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

姜堰市| 玛曲县| 师宗县| 宜州市| 桂东县| 卫辉市| 砀山县| 石景山区| 武威市| 和政县| 仁寿县| 平远县| 抚宁县| 渭源县| 抚顺县| 德令哈市| 永春县| 定日县| 崇文区| 东山县| 永川市| 青龙| 神池县| 四子王旗| 寿光市| 中方县| 兴宁市| 郁南县| 石台县| 正镶白旗| 大港区| 融水| 上林县| 上栗县| 三河市| 怀柔区| 涪陵区| 三门县| 拜城县| 许昌市| 丹东市|