亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

榕江县| 翁源县| 波密县| 彭泽县| 潜山县| 龙游县| 肃南| 长沙市| 罗甸县| 华容县| 梁山县| 富锦市| 大方县| 濉溪县| 松潘县| 乌兰浩特市| 璧山县| 南开区| 尚志市| 博爱县| 曲阜市| 泸定县| 左贡县| 安仁县| 遂溪县| 明溪县| 阿拉善盟| 西藏| 关岭| 大庆市| 泽州县| 太康县| 合肥市| 青龙| 泌阳县| 乌什县| 红原县| 深州市| 汶上县| 民乐县| 浦江县|