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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 集合系列(4): LinkedList源码深入解析2

發布時間:2025/3/20 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 集合系列(4): LinkedList源码深入解析2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

戳上面的藍字關注我們哦!

?精彩內容?


?

精選java等全套視頻教程

精選java電子圖書

大數據視頻教程精選

java項目練習精選

第4部分 LinkedList遍歷方式

LinkedList遍歷方式

LinkedList支持多種遍歷方式。建議不要采用隨機訪問的方式去遍歷LinkedList,而采用逐個遍歷的方式。
(01) 第一種,通過迭代器遍歷。即通過Iterator去遍歷。

for(Iterator iter = list.iterator(); iter.hasNext();)iter.next();

(02) 通過```訪問遍歷LinkedList

int size = list.size(); for (int i=0; i<size; i++) {list.get(i); ? ? ? ? }

(03) 通過另外一種for循環來遍歷LinkedList

for (Integer integ:list) ;

(04) 通過pollFirst()來遍歷LinkedList

while(list.pollFirst() != null);

(05) 通過pollLast()來遍歷LinkedList

while(list.pollLast() != null);

(06) 通過removeFirst()來遍歷LinkedList

try {while(list.removeFirst() != null); } catch (NoSuchElementException e) { }

(07) 通過removeLast()來遍歷LinkedList

try {while(list.removeLast() != null); } catch (NoSuchElementException e) { }

測試這些遍歷方式效率的代碼如下:

public class LinkedListThruTest {public static void main(String[] args) {// 通過Iterator遍歷LinkedListiteratorLinkedListThruIterator(getLinkedList()) ;// 通過快速隨機訪問遍歷LinkedListiteratorLinkedListThruForeach(getLinkedList()) ;// 通過for循環的變種來訪問遍歷LinkedListiteratorThroughFor2(getLinkedList()) ;// 通過PollFirst()遍歷LinkedListiteratorThroughPollFirst(getLinkedList()) ;// 通過PollLast()遍歷LinkedListiteratorThroughPollLast(getLinkedList()) ;// 通過removeFirst()遍歷LinkedListiteratorThroughRemoveFirst(getLinkedList()) ;// 通過removeLast()遍歷LinkedListiteratorThroughRemoveLast(getLinkedList()) ;}private static LinkedList getLinkedList() {LinkedList llist = new LinkedList();for (int i=0; i<100000; i++)llist.addLast(i);return llist;}/*** 通過快迭代器遍歷LinkedList*/private static void iteratorLinkedListThruIterator(LinkedList<Integer> list) {if (list == null)return ;// 記錄開始時間long start = System.currentTimeMillis();for(Iterator iter = list.iterator(); iter.hasNext();)iter.next();// 記錄結束時間long end = System.currentTimeMillis();long interval = end - start;System.out.println("iteratorLinkedListThruIterator:" + interval+" ms");}/*** 通過快速隨機訪問遍歷LinkedList*/private static void iteratorLinkedListThruForeach(LinkedList<Integer> list) {if (list == null)return ;// 記錄開始時間long start = System.currentTimeMillis();int size = list.size();for (int i=0; i<size; i++) {list.get(i); ? ? ? ?}// 記錄結束時間long end = System.currentTimeMillis();long interval = end - start;System.out.println("iteratorLinkedListThruForeach:" + interval+" ms");}/*** 通過另外一種for循環來遍歷LinkedList*/private static void iteratorThroughFor2(LinkedList<Integer> list) {if (list == null)return ;// 記錄開始時間long start = System.currentTimeMillis();for (Integer integ:list) ;// 記錄結束時間long end = System.currentTimeMillis();long interval = end - start;System.out.println("iteratorThroughFor2:" + interval+" ms");}/*** 通過pollFirst()來遍歷LinkedList*/private static void iteratorThroughPollFirst(LinkedList<Integer> list) {if (list == null)return ;// 記錄開始時間long start = System.currentTimeMillis();while(list.pollFirst() != null);// 記錄結束時間long end = System.currentTimeMillis();long interval = end - start;System.out.println("iteratorThroughPollFirst:" + interval+" ms");}/*** 通過pollLast()來遍歷LinkedList*/private static void iteratorThroughPollLast(LinkedList<Integer> list) {if (list == null)return ;// 記錄開始時間long start = System.currentTimeMillis();while(list.pollLast() != null);// 記錄結束時間long end = System.currentTimeMillis();long interval = end - start;System.out.println("iteratorThroughPollLast:" + interval+" ms");}/*** 通過removeFirst()來遍歷LinkedList*/private static void iteratorThroughRemoveFirst(LinkedList<Integer> list) {if (list == null)return ;// 記錄開始時間long start = System.currentTimeMillis();try {while(list.removeFirst() != null);} catch (NoSuchElementException e) {}// 記錄結束時間long end = System.currentTimeMillis();long interval = end - start;System.out.println("iteratorThroughRemoveFirst:" + interval+" ms");}/*** 通過removeLast()來遍歷LinkedList*/private static void iteratorThroughRemoveLast(LinkedList<Integer> list) {if (list == null)return ;// 記錄開始時間long start = System.currentTimeMillis();try {while(list.removeLast() != null);} catch (NoSuchElementException e) {}// 記錄結束時間long end = System.currentTimeMillis();long interval = end - start;System.out.println("iteratorThroughRemoveLast:" + interval+" ms");} }

iteratorLinkedListThruIterator:8 ms
iteratorLinkedListThruForeach:3724 ms
iteratorThroughFor2:5 ms
iteratorThroughPollFirst:8 ms
iteratorThroughPollLast:6 ms
iteratorThroughRemoveFirst:2 ms
iteratorThroughRemoveLast:2 ms

由此可見,遍歷LinkedList時,使用removeFist()或removeLast()效率最高。但用它們遍歷時,會刪除原始數據;若單純只讀取,而不刪除,應該使用第3種遍歷方式。
無論如何,千萬不要通過隨機訪問去遍歷LinkedList!

第5部分 LinkedList示例

下面通過一個示例來學習如何使用LinkedList的常用API

import java.util.List; import java.util.Iterator; import java.util.LinkedList; import java.util.NoSuchElementException; /** @desc LinkedList測試程序。** @author skywang* @email ?kuiwu-wang@163.com*/ public class LinkedListTest {public static void main(String[] args) {// 測試LinkedList的APItestLinkedListAPIs() ;// 將LinkedList當作 LIFO(后進先出)的堆棧useLinkedListAsLIFO();// 將LinkedList當作 FIFO(先進先出)的隊列useLinkedListAsFIFO();}/** 測試LinkedList中部分API*/private static void testLinkedListAPIs() {String val = null;//LinkedList llist;//llist.offer("10");// 新建一個LinkedListLinkedList llist = new LinkedList();//---- 添加操作 ----// 依次添加1,2,3llist.add("1");llist.add("2");llist.add("3");// 將“4”添加到第一個位置llist.add(1, "4");System.out.println("\nTest \"addFirst(), removeFirst(), getFirst()\"");// (01) 將“10”添加到第一個位置。 ?失敗的話,拋出異常!llist.addFirst("10");System.out.println("llist:"+llist);// (02) 將第一個元素刪除。 ? ? ? ?失敗的話,拋出異常!System.out.println("llist.removeFirst():"+llist.removeFirst());System.out.println("llist:"+llist);// (03) 獲取第一個元素。 ? ? ? ? ?失敗的話,拋出異常!System.out.println("llist.getFirst():"+llist.getFirst());System.out.println("\nTest \"offerFirst(), pollFirst(), peekFirst()\"");// (01) 將“10”添加到第一個位置。 ?返回true。llist.offerFirst("10");System.out.println("llist:"+llist);// (02) 將第一個元素刪除。 ? ? ? ?失敗的話,返回null。System.out.println("llist.pollFirst():"+llist.pollFirst());System.out.println("llist:"+llist);// (03) 獲取第一個元素。 ? ? ? ? ?失敗的話,返回null。System.out.println("llist.peekFirst():"+llist.peekFirst());System.out.println("\nTest \"addLast(), removeLast(), getLast()\"");// (01) 將“20”添加到最后一個位置。 ?失敗的話,拋出異常!llist.addLast("20");System.out.println("llist:"+llist);// (02) 將最后一個元素刪除。 ? ? ? ?失敗的話,拋出異常!System.out.println("llist.removeLast():"+llist.removeLast());System.out.println("llist:"+llist);// (03) 獲取最后一個元素。 ? ? ? ? ?失敗的話,拋出異常!System.out.println("llist.getLast():"+llist.getLast());System.out.println("\nTest \"offerLast(), pollLast(), peekLast()\"");// (01) 將“20”添加到第一個位置。 ?返回true。llist.offerLast("20");System.out.println("llist:"+llist);// (02) 將第一個元素刪除。 ? ? ? ?失敗的話,返回null。System.out.println("llist.pollLast():"+llist.pollLast());System.out.println("llist:"+llist);// (03) 獲取第一個元素。 ? ? ? ? ?失敗的話,返回null。System.out.println("llist.peekLast():"+llist.peekLast());// 將第3個元素設置300。不建議在LinkedList中使用此操作,因為效率低!llist.set(2, "300");// 獲取第3個元素。不建議在LinkedList中使用此操作,因為效率低!System.out.println("\nget(3):"+llist.get(2));// ---- toArray(T[] a) ----// 將LinkedList轉行為數組String[] arr = (String[])llist.toArray(new String[0]);for (String str:arr) System.out.println("str:"+str);// 輸出大小System.out.println("size:"+llist.size());// 清空LinkedListllist.clear();// 判斷LinkedList是否為空System.out.println("isEmpty():"+llist.isEmpty()+"\n");}/*** 將LinkedList當作 LIFO(后進先出)的堆棧*/private static void useLinkedListAsLIFO() {System.out.println("\nuseLinkedListAsLIFO");// 新建一個LinkedListLinkedList stack = new LinkedList();// 將1,2,3,4添加到堆棧中stack.push("1");stack.push("2");stack.push("3");stack.push("4");// 打印“棧”System.out.println("stack:"+stack);// 刪除“棧頂元素”System.out.println("stack.pop():"+stack.pop());// 取出“棧頂元素”System.out.println("stack.peek():"+stack.peek());// 打印“棧”System.out.println("stack:"+stack);}/*** 將LinkedList當作 FIFO(先進先出)的隊列*/private static void useLinkedListAsFIFO() {System.out.println("\nuseLinkedListAsFIFO");// 新建一個LinkedListLinkedList queue = new LinkedList();// 將10,20,30,40添加到隊列。每次都是插入到末尾queue.add("10");queue.add("20");queue.add("30");queue.add("40");// 打印“隊列”System.out.println("queue:"+queue);// 刪除(隊列的第一個元素)System.out.println("queue.remove():"+queue.remove());// 讀取(隊列的第一個元素)System.out.println("queue.element():"+queue.element());// 打印“隊列”System.out.println("queue:"+queue);} }

運行結果:

Test "addFirst(), removeFirst(), getFirst()"
llist:[10, 1, 4, 2, 3]
llist.removeFirst():10
llist:[1, 4, 2, 3]
llist.getFirst():1

Test "offerFirst(), pollFirst(), peekFirst()"
llist:[10, 1, 4, 2, 3]
llist.pollFirst():10
llist:[1, 4, 2, 3]
llist.peekFirst():1

Test "addLast(), removeLast(), getLast()"
llist:[1, 4, 2, 3, 20]
llist.removeLast():20
llist:[1, 4, 2, 3]
llist.getLast():3

Test "offerLast(), pollLast(), peekLast()"
llist:[1, 4, 2, 3, 20]
llist.pollLast():20
llist:[1, 4, 2, 3]
llist.peekLast():3

get(3):300
str:1
str:4
str:300
str:3
size:4
isEmpty():true

useLinkedListAsLIFO
stack:[4, 3, 2, 1]
stack.pop():4
stack.peek():3
stack:[3, 2, 1]

useLinkedListAsFIFO
queue:[10, 20, 30, 40]
queue.remove():10
queue.element():20
queue:[20, 30, 40]

回復以下關鍵字獲取更多學習資源

java基礎|html5|css|js|jquery|angularJs|ajax|node.js|javaEE基礎| |struts2|hibernate|spring|svn|maven|springmvc|mybatis|linux|oracle| |luncene|solr|redis|springboot|架構師資源|dubbo|php|webservice|c++基礎|nginx|mysql|sqlserver|asp.net|大數據|java項目

更多學習資源逐步更新,請置頂公眾號不要錯過更新

好好學java

每日推送java優質文章、視頻教程、熱點資訊

微信ID:sihailoveyan

長按左側二維碼關注


總結

以上是生活随笔為你收集整理的Java 集合系列(4): LinkedList源码深入解析2的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 尤物网站在线播放 | 成 年 人 黄 色 大 片大 全 | 国产精欧美一区二区三区蓝颜男同 | 欧美成人午夜精品免费 | 久久资源365| 亚洲男人天堂影院 | 多毛的亚洲人毛茸茸 | 爱情岛论语亚洲入口 | 国产欧美123| 国产一级影片 | 性欧美18| 色戒电影未测减除版 | 国产精品igao视频 | 76少妇精品导航 | 黄色一级在线 | av观看在线免费 | 亚洲天堂激情 | 黄色片久久 | 亚洲第一免费网站 | 五月天av影院 | 第四色在线视频 | 中文国语毛片高清视频 | 日韩免费毛片 | 老头老太做爰xxx视频 | 男生舔女生的屁股 | 97超级碰碰碰 | 亚洲高清视频在线播放 | 亚洲精品偷拍 | 中文字幕在线视频精品 | 日韩免费视频观看 | sm乳奴虐乳调教bdsm | 五月天激情国产综合婷婷婷 | japan高清日本乱xxxxx | 日本三级中文字幕 | 体感预报日剧 | 免费古装一级淫片潘金莲 | 天天色影网| 欧美v在线| 十大污视频 | 欧美精品日韩 | 欧美网站在线观看 | 我们2018在线观看免费版高清 | 久久加勒比 | 超碰人人人人人人人 | 一级做a爰片久久毛片潮喷 天天透天天干 | 网站在线观看你懂的 | 情侣av| 福利小视频在线 | 中国老太婆性视频 | 水蜜桃91 | 日本高清在线观看 | 中文幕无线码中文字蜜桃 | 精品黑人一区二区三区观看时间 | 久久只有精品 | 麻豆av片| 视频在线不卡 | 日韩影视一区二区三区 | 日韩欧美精品在线观看 | 中文字幕免费在线播放 | 久久国产精品二区 | av四虎| 久久精品性| 在线步兵区 | 这里只有精品国产 | 日韩一区二区三区视频在线 | 欧美毛片基地 | 国产一区二区在 | av在线亚洲天堂 | 国产精品88 | 日韩无套无码精品 | 爽爽免费视频 | 在线观看视频二区 | 国产一级片免费在线观看 | 亚洲国产成人精品女人 | 性免费视频 | 两性av| 小泽玛丽亚在线观看 | 日日噜噜噜噜人人爽亚洲精品 | 亚洲无人区码一码二码三码的含义 | 黄色国产小视频 | 三级av免费看 | 男人晚上看的视频 | 自拍偷拍中文字幕 | 黄色精品视频在线观看 | 自拍偷拍在线播放 | 香蕉视频一区二区三区 | 艹少妇视频 | 国产美女视频一区二区 | 91中文字幕在线播放 | 欧美巨大荫蒂茸毛毛人妖 | 欧美精品乱人伦久久久久久 | 国产毛片久久久久久国产毛片 | 亚洲免费网 | 可以看av的网站 | 在线天堂中文 | 国产精品久久久免费视频 | 中文婷婷| 欧美黄片一区二区三区 | 男女一进一出视频 |