java集合的三種遍歷方式以及各自優缺點分析
阿新 • • 發佈:2018-12-09
1、Iterator介面 Iterator是Java集合框架的成員,主要用於遍歷(即迭代訪問)Collection集合中的元素,也稱為迭代器。
提供的三種方法:
boolean hasNext():返回集合裡的下一個元素。
Object next():返回集合裡下一個元素。
void remove();刪除集合裡上一次next方法返回的元素。
簡單例項:
[java] view plain copy public class test1 { public static void main(String[] args) {
Collection books = new HashSet(); books.add("book1"); books.add("book2"); books.add("book3"); //獲取books集合對應的迭代器 Iterator it = books.iterator(); while(it.hasNext()) { String book = (String)it.next(); System.out.println("bookName:"+book); //遍歷輸出book1 book2 book3 if (book.equals("book1")) { it.remove(); //使用Iterator迭代過程中,不可直接操作/修改集合元素,只能使用迭代器操作元素 下面程式碼引發異常 //books.remove(book); } //對book變數賦值,不會改變集合元素本身 book = "測試"; } System.out.println(books); //輸出[book2,book3] 因為book1被刪除
}
} 優缺點分析: 優點:迭代器提供了操作元素的方法 可以在遍歷中相應地操作元素 缺點:運行復雜,效能稍差,效率相對其他兩種遍歷方式較低
2、使用foreach迴圈(加強for迴圈)
簡單例項:
[java] view plain copy public class test1 { public static void main(String[] args) {
// 建立List並新增元素 List<string> list = new ArrayList<string>(); list.add("1"); list.add("3"); list.add("4"); // 利用foreach語句輸出集合元素 for (String x : list) { System.out.println("foreach:"+x); } } }
優缺點分析:
優點:程式碼簡潔,不易出錯。
缺點:只能做簡單的遍歷,不能在遍歷過程中操作(刪除、替換)資料集合。
3、原始for迴圈遍歷
簡單例項:
[java] view plain copy public class test1 { public static void main(String[] args) {
// 建立List並新增元素 List<string> list = new ArrayList<string>(); list.add("1"); list.add("3"); list.add("4"); // 利用for迴圈語句輸出集合元素 for (int i=0;i<list.size();i++) {="" system.out.println("for:"+list.get(i));="" }="" }<="" pre=""></list.size();i++)></string></string>
優缺點分析:
優點:效率最高,遍歷快,可以根據自定計數器操作元素
缺點:不適用所有集合,適用範圍小
各種遍歷方式適用場合:
1、傳統的for迴圈遍歷,基於計數器的:
順序儲存:讀取效能比較高。適用於遍歷順序儲存集合。
鏈式儲存:時間複雜度太大,不適用於遍歷鏈式儲存的集合。
2、迭代器遍歷,Iterator:
順序儲存:如果不是太在意時間,推薦選擇此方式,畢竟程式碼更加簡潔,也防止了Off-By-One的問題。
鏈式儲存:意義就重大了,平均時間複雜度降為O(n),還是挺誘人的,所以推薦此種遍歷方式。
3、foreach迴圈遍歷:
foreach只是讓程式碼更加簡潔了,但是他有一些缺點,就是遍歷過程中不能操作資料集合(刪除等),所以有些場合不使用。而且它本身就是基於Iterator實現的,但是由於型別轉換的問題,所以會比直接使用Iterator慢一點,但是還好,時間複雜度都是一樣的。所以怎麼選擇,參考上面兩種方式,做一個折中的選擇。