熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java List遍歷方法及其效率對比

2013-11-23 19:13:53  來源: Java核心技術 

  Java代碼

  package comzbalphatest;

  

  import javautilArrayList;

  import javautilIterator;

  import javautilList;

  

  public class ListTest {

      public static void main(String args[]){

          List<Long> lists = new ArrayList<Long>();

  

          for(Long i=l;i<l;i++){

              listsadd(i);

          }

  

          Long oneOk = oneMethod(lists);

          Long twoOk = twoMethod(lists);

          Long threeOk = threeMethod(lists);

          Long fourOk = fourMethod(lists);

  

          Systemoutprintln(One: + oneOk);

          Systemoutprintln(Two: + twoOk);

          Systemoutprintln(Three: + threeOk);

          Systemoutprintln(four: + fourOk);

  

      }

  

      public static Long oneMethod(List<Long> lists){

  

          Long timeStart = SystemcurrentTimeMillis();

          for(int i=;i<listssize();i++)    {

              Systemoutprintln(listsget(i));

          }

          Long timeStop = SystemcurrentTimeMillis();

  

          return timeStop timeStart ;

      }

  

      public static Long twoMethod(List<Long> lists){

  

          Long timeStart = SystemcurrentTimeMillis();

          for(Long string : lists)    {

              Systemoutprintln(string);

          }

          Long timeStop = SystemcurrentTimeMillis();

  

          return timeStop timeStart ;

      }

  

      public static Long threeMethod(List<Long> lists){

  

          Long timeStart = SystemcurrentTimeMillis();

          Iterator<Long> it = erator();

          while (ithasNext())

          {

                  Systemoutprintln(itnext());

          }

          Long timeStop = SystemcurrentTimeMillis();

  

          return timeStop timeStart ;

      }

  

  

  

      public static Long fourMethod(List<Long> lists){

  

          Long timeStart = SystemcurrentTimeMillis();

          for(Iterator<Long> i = erator(); ihasNext();)    {

              Systemoutprintln(inext());

          }

          Long timeStop = SystemcurrentTimeMillis();

  

          return timeStop timeStart ;

      }

  }

  容器類可以大大提高編程效率和編程能力在Java所有的容器都由SUN公司的Joshua Bloch進行了重新設計豐富了容器類庫的功能

  Java容器類類庫的用途是保存對象它分為兩類

  Collection一組獨立的元素通常這些元素都服從某種規則List必須保持元素特定的順序而Set不能有重復元素

  Map一組成對的鍵值對對象即其元素是成對的對象最典型的應用就是數據字典並且還有其它廣泛的應用另外Map可以返回其所有鍵組成的Set和其所有值組成的Collection或其鍵值對組成的Set並且還可以像數組一樣擴展多維Map只要讓Map中鍵值對的每個 是一個Map即可

  迭代器

  迭代器是一種設計模式它是一個對象它可以遍歷並選擇序列中的對象而開發人員不需要了解該序列的底層結構迭代器通常被稱為輕量級對象因為創建它的代價小

  Java中的Iterator功能比較簡單並且只能單向移動

  () 使用方法iterator()要求容器返回一個Iterator第一次調用Iterator的next()方法時它返回序列的第一個元素

  () 使用next()獲得序列中的下一個元素

  () 使用hasNext()檢查序列中是否還有元素

  () 使用remove()將迭代器新返回的元素刪除

  Iterator是Java迭代器最簡單的實現為List設計的ListIterator具有更多的功能它可以從兩個方向遍歷List也可以從List中插入和刪除元素

  List的功能方法

  List(interface): 次序是List最重要的特點它確保維護元素特定的順序List為Collection添加了許多方法使得能夠向List中間插入與移除元素(只推薦 LinkedList使用)一個List可以生成ListIterator使用它可以從兩個方向遍歷List也可以從List中間插入和刪除元素

  ArrayList: 由數組實現的List它允許對元素進行快速隨機訪問但是向List中間插入與移除元素的速度很慢ListIterator只應該用來由後向前遍歷ArrayList而不是用來插入和刪除元素因為這比LinkedList開銷要大很多

  LinkedList: 對順序訪問進行了優化向List中間插入與刪除得開銷不大隨機訪問則相對較慢(可用ArrayList代替)它具有方法addFirst() addLast()getFirst()getLast()removeFirst()removeLast()這些方法(沒有在任何接口或基類中定義過)使得LinkedList可以當作堆棧隊列和雙向隊列使用

  Set的功能方法

  Set(interface): 存入Set的每個元素必須是唯一的因為Set不保存重復元素加入Set的Object必須定義equals()方法以確保對象的唯一性Set與Collection有完全一樣的接口Set接口不保證維護元素的次序

  HashSet: 為快速查找而設計的Set存入HashSet的對象必須定義hashCode()

  TreeSet: 保持次序的Set底層為樹結構使用它可以從Set中提取有序的序列

  LinkedHashSet: 具有HashSet的查詢速度且內部使用鏈表維護元素的順序(插入的次序)於是在使用迭代器遍歷Set時結果會按元素插入的次序顯示

  HashSet采用散列函數對元素進行排序這是專門為快速查詢而設計的TreeSet采用紅黑樹的數據結構進行排序元素LinkedHashSet內部使用散列以加快查詢速度同時使用鏈表維護元素的次序使得看起來元素是以插入的順序保存的需要注意的是生成自己的類時Set需要維護元素的存儲順序因此要實現Comparable接口並定義compareTo()方法


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26494.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.