Java LinkList遍歷方式


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循環

 

[java]  view plain  copy
 
  1. for (Integer integ:list)   
  2.     ;  

c.迭代器iterator

 

 

[java]  view plain  copy
 
  1. for(Iterator iter = list.iterator(); iter.hasNext();)  
  2.     iter.next();  

d.用pollFirst()來遍歷LinkedList

 

 

[java]  view plain  copy
 
  1. while(list.pollFirst() != null)  
  2.     ;  

e.用pollLast()來遍歷LinkedList

 

 

[java]  view plain  copy
 
  1. while(list.pollLast() != null)  
  2.     ;  

f.用removeFirst()來遍歷LinkedList

 

 

[java]  view plain  copy
 
  1. try {  
  2.     while(list.removeFirst() != null)  
  3.         ;  
  4. catch (NoSuchElementException e) {  
  5. }  

g.用removeLast()來遍歷LinkedList

 

 

[java]  view plain  copy
 
  1. try {  
  2.     while(list.removeLast() != null)  
  3.         ;  
  4. catch (NoSuchElementException e) {  
  5. }  

 

LinkedList遍歷效率分析:

 

[java]  view plain  copy
 
  1. package com.sheepmu;  
  2. import java.util.Iterator;  
  3. import java.util.LinkedList;  
  4. import java.util.NoSuchElementException;  
  5.   
  6. /* 
  7.  * @author SheepMu 
  8.  */  
  9. public class LinkedListTest {  
  10.     public static void main(String[] args) {  
  11.         LinkedList<Integer> llist = new LinkedList<Integer>();  
  12.         for (int i=0; i<100000; i++)  
  13.             llist.addLast(i);  
  14.           
  15.         byCommonFor(llist) ;// 通過一般for循環來遍歷LinkedList  
  16.         byForEach(llist) ;  // 通過for-each來遍歷LinkedList  
  17.         byIterator(llist) ; // 通過Iterator來遍歷LinkedList  
  18.         byPollFirst(llist) ;    // 通過PollFirst()遍歷LinkedList     
  19.         byPollLast(llist) ; // 通過PollLast()遍歷LinkedList   
  20.         byRemoveFirst(llist) ;   // 通過removeFirst()遍歷LinkedList     
  21.         byRemoveLast(llist) ; // 通過removeLast()遍歷LinkedList  
  22.     }  
  23.       
  24.    
  25.     private static void byCommonFor(LinkedList<Integer> list) {// 通過一般for循環來遍歷LinkedList  
  26.         if (list == null)  
  27.             return ;  
  28.         long start = System.currentTimeMillis();       
  29.         int size = list.size();  
  30.         for (int i=0; i<size; i++) {  
  31.             list.get(i);          
  32.         }  
  33.         long end = System.currentTimeMillis();  
  34.         long total = end - start;  
  35.         System.out.println("byCommonFor------->" + total+" ms");  
  36.     }  
  37.       
  38.     private static void byForEach(LinkedList<Integer> list) {// 通過for-each來遍歷LinkedList  
  39.         if (list == null)  
  40.             return ;   
  41.         long start = System.currentTimeMillis();         
  42.         for (Integer integ:list)   
  43.             ;   
  44.         long end = System.currentTimeMillis();  
  45.         long total = end - start;  
  46.         System.out.println("byForEach------->" + total+" ms");  
  47.     }  
  48.    
  49.     private static void byIterator(LinkedList<Integer> list) {// 通過Iterator來遍歷LinkedList  
  50.         if (list == null)  
  51.             return ;   
  52.         long start = System.currentTimeMillis();       
  53.         for(Iterator iter = list.iterator(); iter.hasNext();)  
  54.             iter.next();   
  55.         long end = System.currentTimeMillis();  
  56.         long total = end - start;  
  57.         System.out.println("byIterator------->" + total+" ms");  
  58.     }  
  59.    
  60.     private static void byPollFirst(LinkedList<Integer> list) {//通過PollFirst()遍歷LinkedList     
  61.         if (list == null)  
  62.             return ;   
  63.         long start = System.currentTimeMillis();  
  64.         while(list.pollFirst() != null)  
  65.             ;   
  66.         long end = System.currentTimeMillis();  
  67.         long total = end - start;  
  68.         System.out.println("byPollFirst------->" + total+" ms");  
  69.     }  
  70.    
  71.     private static void byPollLast(LinkedList<Integer> list) {// 通過PollLast()遍歷LinkedList   
  72.         if (list == null)  
  73.             return ;   
  74.         long start = System.currentTimeMillis();  
  75.         while(list.pollLast() != null)  
  76.             ;   
  77.         long end = System.currentTimeMillis();  
  78.         long total = end - start;  
  79.         System.out.println("byPollLast------->" + total+" ms");  
  80.     }  
  81.    
  82.     private static void byRemoveFirst(LinkedList<Integer> list) {// 通過removeFirst()遍歷LinkedList  
  83.         if (list == null)  
  84.             return ;   
  85.         long start = System.currentTimeMillis();  
  86.         try {  
  87.             while(list.removeFirst() != null)  
  88.                 ;  
  89.         } catch (NoSuchElementException e) {  
  90.         }   
  91.         long end = System.currentTimeMillis();  
  92.         long total = end - start;  
  93.         System.out.println("byRemoveFirst------->" + total+" ms");  
  94.     }  
  95.    
  96.     private static void byRemoveLast(LinkedList<Integer> list) {// 通過removeLast()遍歷LinkedList  
  97.         if (list == null)  
  98.             return ;  
  99.         long start = System.currentTimeMillis();  
  100.         try {  
  101.             while(list.removeLast() != null)  
  102.                 ;  
  103.         } catch (NoSuchElementException e) {  
  104.         }  
  105.         long end = System.currentTimeMillis();  
  106.         long total = end - start;  
  107.         System.out.println("byRemoveLast------->" + total+" ms");  
  108.     }  
  109.   
  110. }  

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常用方法舉例

 

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM