• 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循环

    [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

  • 相关阅读:
    说一下spring bean的生命周期
    oracle是怎么分页的
    Zookeeper和eureka之间的区别?
    说一下zookeeper和eureka之间的区别?
    假如一张表有一亿条数据,你怎样提高查询效率
    equals和==的区别
    谈谈你对oracle序列的理解
    你们项目中权限是怎样做的?
    讲解一下spring cloud常见组件的作用?
    说一下你们项目中实体类都是怎样重写hashcode()和equals()的
  • 原文地址:https://www.cnblogs.com/shihaiming/p/11364650.html
Copyright © 2020-2023  润新知