bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

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

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

成都創新互聯公司長期為上千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為南江企業提供專業的成都做網站、成都網站建設、成都外貿網站建設,南江網站改版等技術服務。擁有十年豐富建站經驗和眾多成功案例,為您定制開發。

雖然遍歷方式的寫法有多種,但是底層無非就是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在遍歷集合時的差別有什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。

新聞名稱:for與foreach在遍歷集合時的差別有什么
新聞來源:http://vcdvsql.cn/article16/pehcdg.html

成都網站建設公司_創新互聯,為您提供網站排名、搜索引擎優化、做網站、營銷型網站建設、企業網站制作關鍵詞優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設