日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

增强型的for循环linkedlist_LinkedList给我深深的上了节for增强的课

發布時間:2024/3/26 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 增强型的for循环linkedlist_LinkedList给我深深的上了节for增强的课 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:標題既然這么說,就證明它的確坑了我一把。在平時習慣使用了普通的for循環。所以在寫遍歷的時候也是經常使用這種。然而一味的使用它,給我帶來了麻煩。項目開發中,有一個需求是插入多,讀少的需求。想著這不是LinkedList的特性嗎,就果斷的使用了它。然而不久,同事反饋這個業務在讀取時,時間特別長。開始想本來LinkedList讀就慢嘛,后來一個公司一個大佬看見了我這部分的代碼,這個地方慢的另外一個原因是因為我使用了普通的for循環。應該使用for增強形式。

這里小編提一個疑問哈:“java中哪些數據類型可以用于增強for循環”?這是在群里看見的一個面試題,網上沒有找到答案,我認為是基本類型和引用類型都可以,還有就是實現了Iterable接口的,比如集合。有知道答案的可以在下面評論下。不勝感激。

步入正題:首先看下在數組中有什么差異

未編譯代碼,也就是我們程序員寫的

使用jad查看反編譯代碼

jad命令

jad反編譯代碼

從反編譯代碼中,可以看出數組中沒有什么差別。基本一致。只不過for增強寫法上簡單明了些。性能上沒有什么差別。

在看下在集合中有什么差異

未編譯代碼集合

jad反編譯代碼

可以看得出普通for和for增強使用了2種不一樣的方式實現,那么那個性能更好呢。

arraylist測試

測試了幾次,發現執行時間差不多,并且普通for還比for增強快了些。那在看看LinkedList

LinkedList測試

性能上立馬體現出來了。普通for慢很多。看過arraylist和LinkedList源碼的肯定知道八九不離十了。我這里就說下結論:需要循環數組結構的數據時,建議使用普通for循環,因為for循環采用下標訪問,需要循環鏈表結構的數據時,一定不要使用普通for循環,這種做法很糟糕,數據量大的時候有可能會導致系統崩潰。

那for增強有沒有什么缺點呢,肯定是有的,上面的代碼中for增強最終會變成Iterator遍歷。Iterator的缺點也就是它的缺點了。如在迭代的過程中,除了使用迭代器(如:Iterator.remove()方法)對集合增刪元素外,是不允許直接對集合進行增刪操作。否則將會拋出 ConcurrentModificationException異常。

for增強缺點

總結:

無論是在數組中還是在集合中,加強型for循環都是它們各自的普通for循環的一種“簡寫方式”,即兩者意思上是等價的,但前者方便簡單,建議多使用。for增強不能完全代替普通for循環,因為for增強有一定的局限性。(如數組中不能替換相應索引下的值;集合中不能對集合進行增刪操作、也不能獲取索引)for增強只能用于數組、Iterable類型(包括集合)。集合中的for增強本質上使用了Ierator迭代器,所以要注意Itrator迭代陷阱。

總結

以上是生活随笔為你收集整理的增强型的for循环linkedlist_LinkedList给我深深的上了节for增强的课的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。