迭代器和for迴圈的效率比較
實體Person類
package com.zhang.loop;
public class Person { private String a; private int b; public Person(String a, int b) { super(); this.a = a; this.b = b; } public String getA() { return a; } public void setA(String a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } }
測試ArrayList的主程式
package com.zhang.loop; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TestArrayList { private static final int COUNT = 800000; private static List<Person> persons = new ArrayList<Person>(); public static void main(String[] args) { init(); System.out.println("for迴圈測試結果:"+testFor()); System.out.println("foreach迴圈測試結果:"+testForeach()); System.out.println("iterator迴圈測試結果:"+testIterator()); } //初始化集合 public static void init(){ for (int i = 0; i <COUNT; i++) { persons.add(new Person("第"+i+"個元素",i)); } } //for迴圈便利集合 public static long testFor(){ long start = System.nanoTime(); Person p = null; for (int i = 0; i < persons.size(); i++) { p = persons.get(i); } return (System.nanoTime()-start)/1000; } //foreach迴圈便利集合 public static long testForeach(){ long start = System.nanoTime(); Person p = null; for (Person person : persons) { p = person; } return (System.nanoTime()-start)/1000; } //iterator迴圈便利集合 public static long testIterator(){ long start = System.nanoTime(); Person p = null; Iterator<Person> itreator = persons.iterator(); while(itreator.hasNext()){ p = itreator.next(); } return (System.nanoTime()-start)/1000; } }
ArrayList測試結果
測試LinkedList的主程式
package com.zhang.loop; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TestArrayList { private static final int COUNT = 8000; private static List<Person> persons = new LinkedList<Person>(); public static void main(String[] args) { init(); System.out.println("for迴圈測試結果:"+testFor()); System.out.println("foreach迴圈測試結果:"+testForeach()); System.out.println("iterator迴圈測試結果:"+testIterator()); } //初始化集合 public static void init(){ for (int i = 0; i <COUNT; i++) { persons.add(new Person("第"+i+"個元素",i)); } } //for迴圈便利集合 public static long testFor(){ long start = System.nanoTime(); Person p = null; for (int i = 0; i < persons.size(); i++) { p = persons.get(i); } return (System.nanoTime()-start)/1000; } //foreach迴圈便利集合 public static long testForeach(){ long start = System.nanoTime(); Person p = null; for (Person person : persons) { p = person; } return (System.nanoTime()-start)/1000; } //iterator迴圈便利集合 public static long testIterator(){ long start = System.nanoTime(); Person p = null; Iterator<Person> itreator = persons.iterator(); while(itreator.hasNext()){ p = itreator.next(); } return (System.nanoTime()-start)/1000; } }
LinkedList測試結果:
記錄的存取方式有兩種:
一種是順序儲存(陣列,ArrayList..)可以根據其下標找到對應的記錄
另一種是連結儲存(LinkedList..)連結儲存(拿單鏈表為例)則必須找到其前一個記錄的位置才能夠找到本記錄。
根據以上可以得到的結果是:for迴圈便於訪問順序儲存的記錄,而foreach和迭代器便於訪問連結儲存。
相關推薦
迭代器和for迴圈的效率比較
實體Person類 package com.zhang.loop;public class Person { private String a; private int b; public Person(String a, int b) { super();
python迭代器和for迴圈原理
我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種: 一類是集合資料型別,如list、tuple、dict、set、str等; 一類是generator,包括生成器和帶yield的generator function。 這些可以直接作用於for迴圈的物件統稱為可迭代物件:Iter
迭代器和 for-of 迴圈
1.、for迴圈(支援break;continue;return等) for (var index = 0; index < myArray.length; index++) { console.log(myArray[index]); } 2、forEach(不支援break;
ES(五)迭代器和for-of迴圈
一 Iterator(遍歷器)的概念 (1)Iterator的作用有三個: 一是為各種資料結構,提供一個統一的、簡單的訪問介面;二是使得資料結構的成員能夠按照某種次序排列三是ES6創造了一種新的遍歷命
集合 ArrayList 集合的繼承實現關係 Collection Iterator迭代器 增強for迴圈 泛型 集合的向下轉型
1.集合介紹 集合,集合是java中提供的一種容器,可以用來儲存多個數據。 我們知道資料多了,可以使用陣列存放或者使用ArrayList集合進行存放資料。那麼,集合和陣列既然都是容器,它們有啥區別呢? 陣列的長度是固定的。集合的長度是可變的。 集合中儲存的元素必須
迭代器和foreach迴圈
遍歷不同容器的元素,如果為每個容器都設計一套遍歷方法,會很麻煩。迭代器Iterator提供了這樣的便利,它可以遍歷並且得到容器中的物件,而不必關心容器的具體型別。 Java的Iterator只能單向移動。 Iterator由實現了Iterable介面的類的iterator(
ArrayList的迭代器和 超強for迴圈
超強for迴圈 也是用迭代器實現的。有個面試官,問去除ArrayList的一些元素,當時寫的是for迴圈,判斷去除,然後左邊退一位。他說不安全。用迭代器遍歷安全,迭代器包含一個remove方法,去除元素後自帶遊標退一位。主要三個方法,hasnext,next,和remove
java基礎第十二篇之集合、增強for迴圈、迭代器和泛型
Collection介面中的常用方法: * 所有的子類子介面都是具有的 * 集合的方法:增刪改查 * * public boolean add(E e);//新增元素 返回值表示是否新增成功 * public boolean remove(Object o);//刪除元素,返回值表示是否刪除成
Iterator迭代器和增強for的注意事項
Iterator迭代器和增強for常見的注意事項 1. 如果沒有元素可迭代了,仍然呼叫next方法則會丟擲以下異常 java.util.NoSuchElementException:沒有元素異常。
網狀迭代器和迴圈器
OpenMesh還提供所謂的迴圈器,其提供與列舉相同或另一種型別的另一項相鄰的項的方法。 通常,CenterItem_AuxiliaryInformation_TargetItem_Iter指定迴圈器,該迴圈器列舉給定中心項周圍的所有目標項。 迴圈器的構造器具有迴圈器(MeshType mesh,Targ
java-Iterator迭代器和增強for
一.Iterator迭代器概述 Collection集合元素的通用獲取方式:在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業術語稱為迭代。 Iterator介面的常用方法如下: hasNext()方法:用
迭代器和分部類
迭代器 迭代器是可以返回相同型別的值的有序序列的一段程式碼,可用作方法,運算子或get訪問器的程式碼體.迭代器程式碼使用yield return語句依次返回每個元素,yield break語句將終止迭代.可以在類中實現多個迭代器,每個迭代器必須像類成員一樣有唯一的名稱,並且可以在foreac
Python學習之迭代器和生成器
那麼首先什麼是迭代器和生成器呢? 迭代器即迭代的工具,那麼什麼又是迭代呢?所謂迭代:迭代是一個重複的過程,每次重讀即一次迭代,並且每次迭代的結果都是下一次迭代的初始值。例: l=[1,2,3] count=0 while count < len(l): print(l[count])
關於迭代器和生成器
迭代器和生成器迭代器 - 概念 可迭代的/可迭代物件 什麼是協議---python規定的 : 可迭代型別 和 python語言之間的協議 可迭代協議---內部含有'__iter__'方法的資料型別都是可迭代的 迭代器協議---內部含有__next__和__iter__方法的變數/值都是迭代器
讀書筆記——Python中的迭代器和列表解析
Python所謂的迭代協議 有__next__方法的物件會前進到下一個結果,在一系列結果的末尾時,則會引發StopIteration。在Python中,任何這類物件都認為是可迭代的。任何這類物件也能以for迴圈或其他迭代工具遍歷,因為所有迭代工具內部工作起來都是在每次迭代中呼叫__next__,
python_魔法方法(六):迭代器和生成器
迭代器 自始至終,都有一個概念一直在用,但是我們卻沒來都沒有人在的深入剖析它。這個概念就是迭代。 迭代的意思有點類似迴圈,每一次的重複的過程被稱為迭代的過程,而每一次迭代得到的結果會被用來作為下一次迭代的初始值。提供迭代方法的容器稱為迭代器,通常接觸的迭代器有序列(列表、元組、字串)還有字典也是迭代器,都
TypeScript筆記:迭代器和生成器(八)
可迭代性 當一個物件實現了Symbol.iterator屬性時,我們認為它是可迭代的。 一些內建的型別如 Array,Map,Set,String,Int32Array,Uint32Array等都已經實現了各自的Symbol.iterator。 物件上的Symbol.it
實戰c++中的vector系列--vector的遍歷(stl演算法、vector迭代器(不要在迴圈中判斷不等於end())、operator[])【轉】
(轉自:https://blog.csdn.net/wangshubo1989/article/details/50374914?utm_source=blogxgwz29) 遍歷一個vector容器有很多種方法,使用起來也是仁者見仁。 通過索引遍歷: for (i = 0; i<
迭代器和可迭代物件
基於python3 迭代器 = 可迭代的物件 可迭代的物件 != 迭代器 講在前面: 返回迭代器的物件,有:open(), map(), zip()和filte()函式,這幾個函式直接返回迭代器也就是可以直接在結果中呼叫next 如: f = open('xxx.txt')
ES6 迭代器和生成器
設計為了更高效的資料處理,避免過多for迴圈巢狀(程式碼複雜度,跟蹤多個迴圈變數) 1. 迭代器: 為迭代過程設計的介面 所有的迭代器物件都有next()方法,每次呼叫都返回一個結果物件,物件有兩個屬性 一個是value, 表示下一個將要返回的值 一個是done,Boolean型別,當沒有更多