天天看點

Java LinkList周遊方式

原文:https://www.cnblogs.com/maohuidong/p/7965766.html

1.LinkedList的周遊方式

a.一般的for循環(随機通路)

[java] view plain copy

  1. int size = list.size();  
  2. for (int i=0; i<size; i++) {  
  3.     list.get(i);          
  4. }  

b.for--each循環

  1. for (Integer integ:list)   
  2.     ;  

c.疊代器iterator

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

d.用pollFirst()來周遊LinkedList

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

e.用pollLast()來周遊LinkedList

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

f.用removeFirst()來周遊LinkedList

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

g.用removeLast()來周遊LinkedList

  1.     while(list.removeLast() != null)  

LinkedList周遊效率分析:

  1. package com.sheepmu;  
  2. import java.util.Iterator;  
  3. import java.util.LinkedList;  
  4. import java.util.NoSuchElementException;  
  5. /* 
  6.  * @author SheepMu 
  7.  */  
  8. public class LinkedListTest {  
  9.     public static void main(String[] args) {  
  10.         LinkedList<Integer> llist = new LinkedList<Integer>();  
  11.         for (int i=0; i<100000; i++)  
  12.             llist.addLast(i);  
  13.         byCommonFor(llist) ;// 通過一般for循環來周遊LinkedList  
  14.         byForEach(llist) ;  // 通過for-each來周遊LinkedList  
  15.         byIterator(llist) ; // 通過Iterator來周遊LinkedList  
  16.         byPollFirst(llist) ;    // 通過PollFirst()周遊LinkedList     
  17.         byPollLast(llist) ; // 通過PollLast()周遊LinkedList   
  18.         byRemoveFirst(llist) ;   // 通過removeFirst()周遊LinkedList     
  19.         byRemoveLast(llist) ; // 通過removeLast()周遊LinkedList  
  20.     }  
  21.     private static void byCommonFor(LinkedList<Integer> list) {// 通過一般for循環來周遊LinkedList  
  22.         if (list == null)  
  23.             return ;  
  24.         long start = System.currentTimeMillis();       
  25.         int size = list.size();  
  26.         for (int i=0; i<size; i++) {  
  27.             list.get(i);          
  28.         }  
  29.         long end = System.currentTimeMillis();  
  30.         long total = end - start;  
  31.         System.out.println("byCommonFor------->" + total+" ms");  
  32.     private static void byForEach(LinkedList<Integer> list) {// 通過for-each來周遊LinkedList  
  33.             return ;   
  34.         long start = System.currentTimeMillis();         
  35.         for (Integer integ:list)   
  36.             ;   
  37.         System.out.println("byForEach------->" + total+" ms");  
  38.     private static void byIterator(LinkedList<Integer> list) {// 通過Iterator來周遊LinkedList  
  39.         for(Iterator iter = list.iterator(); iter.hasNext();)  
  40.             iter.next();   
  41.         System.out.println("byIterator------->" + total+" ms");  
  42.     private static void byPollFirst(LinkedList<Integer> list) {//通過PollFirst()周遊LinkedList     
  43.         long start = System.currentTimeMillis();  
  44.         while(list.pollFirst() != null)  
  45.         System.out.println("byPollFirst------->" + total+" ms");  
  46.     private static void byPollLast(LinkedList<Integer> list) {// 通過PollLast()周遊LinkedList   
  47.         while(list.pollLast() != null)  
  48.         System.out.println("byPollLast------->" + total+" ms");  
  49.     private static void byRemoveFirst(LinkedList<Integer> list) {// 通過removeFirst()周遊LinkedList  
  50.         try {  
  51.             while(list.removeFirst() != null)  
  52.                 ;  
  53.         } catch (NoSuchElementException e) {  
  54.         }   
  55.         System.out.println("byRemoveFirst------->" + total+" ms");  
  56.     private static void byRemoveLast(LinkedList<Integer> list) {// 通過removeLast()周遊LinkedList  
  57.             while(list.removeLast() != null)  
  58.         System.out.println("byRemoveLast------->" + total+" ms");  

byCommonFor------->5342 ms

byForEach------->11 ms

byIterator------->8 ms

byPollFirst------->4 ms

byPollLast------->0 ms

byRemoveFirst------->0 ms

byRemoveLast------->0 ms

由此可見,周遊LinkedList時,使用removeFist()或removeLast()效率最高。但用它們周遊時,會删除原始資料;若單純隻讀取,而不删除,LinkedList周遊時建議使用For-each或者疊代器的方式。千萬不要通過随機通路去周遊LinkedList!

2.LinkedList應用舉例

a.LinkedList常用方法舉例

  1. package com.sheepmu;   
  2. import java.util.LinkedList;   
  3. /*  
  4.     public static void main(String[] args) {     
  5.         commonMethods() ; // 測試LinkedList的常用方法   
  6.         likeStack();// 将LinkedList當作 LIFO(後進先出)的堆棧   
  7.         likeQueue(); // 将LinkedList當作 FIFO(先進先出)的隊列  
  8.     private static void commonMethods() {        
  9.         LinkedList<String> llist = new LinkedList<String>();        
  10.         llist.add("A");//添加元素  
  11.         llist.add("B");  
  12.         llist.add("C");  
  13.         llist.add("D");  
  14.         System.out.println("llist------->"+llist);  
  15.         llist.add(1, "E");// 将“E”添加到第索引為1的個位置  
  16.         System.out.println("添加E到索引為1的個位置後的llist------->"+llist);  
  17.         llist.addFirst("X");//  将“X”添加到第一個位置。  失敗的話,抛出異常!  
  18.         System.out.println("在最前面添加X後的llist------->"+llist);   
  19.         System.out.println("删除第一個元素并獲得并傳回被删除元素----->"+llist.removeFirst());  // 将第一個元素删除。   
  20.         System.out.println("删除第一個元素後的llist------->"+llist);   
  21.         llist.offerFirst("Y");// 将“Y”添加到第一個位置。  傳回true。  
  22.         System.out.println("将Y添加到第一個位置後的llist------->"+llist);      
  23.         System.out.println("删除第一個元素并獲得并傳回被删除元素------>"+llist.pollFirst()); // 将第一個元素删除。   
  24.         System.out.println("将第一個元素删除後的llist------->"+llist);    
  25.         llist.removeLast() ;  
  26.         System.out.println("移除最後一個元素後的llist------->"+llist);   
  27.         llist.offerLast("Z"); //   将“Z”添加到最後一個位置   
  28.         System.out.println("在最後添加Z後的llist------->"+llist);    
  29.         llist.set(2, "M");// 将第3個元素設定M。   
  30.         System.out.println("将第3個元素設定M後的llist------->"+llist);   
  31.         System.out.println("size:"+llist.size());// LinkedList大小         
  32.         llist.clear();// 清空LinkedList   
  33.     private static void likeStack() { //将LinkedList作為棧使用!!!!!!!!!!!!       
  34.         LinkedList<String> stack = new LinkedList<String>();  
  35.         stack.push("A");//向棧中添加元素  
  36.         stack.push("B");  
  37.         stack.push("C");  
  38.         stack.push("D");  
  39.         System.out.println("stack--------->"+stack);  
  40.         stack.pop() ;// 删除“棧頂元素”  
  41.         System.out.println("删除棧頂後的stack--------->"+stack);        
  42.         System.out.println("棧頂元素--------->"+stack.peek()); // 取出棧頂  
  43.     private static void likeQueue() {//将LinkedList作為隊列使用!!!!!!!!!!!!         
  44.         LinkedList<String> queue = new LinkedList<String>();  
  45.         queue.add("A");//向隊列中添加元素  
  46.         queue.add("B");  
  47.         queue.add("C");  
  48.         queue.add("D");      
  49.         System.out.println("queue--------->"+queue);  
  50.         queue.remove() ;//删除隊列的第一個元素  
  51.         System.out.println("删除隊列的第一個元素後queue--------->"+queue);         
  52.         System.out.println("隊列第一個元素------->"+queue.element()); // 讀取隊列的第一個元素   

llist------->[A, B, C, D]

添加E到索引為1的個位置後的llist------->[A, E, B, C, D]

在最前面添加X後的llist------->[X, A, E, B, C, D]

删除第一個元素并獲得并傳回被删除元素----->X

删除第一個元素後的llist------->[A, E, B, C, D]

将Y添加到第一個位置後的llist------->[Y, A, E, B, C, D]

删除第一個元素并獲得并傳回被删除元素------>Y

将第一個元素删除後的llist------->[A, E, B, C, D]

移除最後一個元素後的llist------->[A, E, B, C]

在最後添加Z後的llist------->[A, E, B, C, Z]

将第3個元素設定M後的llist------->[A, E, M, C, Z]

size:5

stack--------->[D, C, B, A]

删除棧頂後的stack--------->[C, B, A]

棧頂元素--------->C

queue--------->[A, B, C, D]

删除隊列的第一個元素後queue--------->[B, C, D]

隊列第一個元素------->B

看完打開支付寶掃一掃領個紅包吧!

Java LinkList周遊方式