摘要:接口下面包含等。但是接口并沒有繼承接口,因此無法迭代。分離出接口是迭代器模式。但是接口又提供了接口以后將轉換成集合來迭代。的增強循環也只適用于那些繼承了接口的。
Iterator接口是Collection接口的父接口。Collection接口下面包含List,Set,Queue等。
Map接口與Collection接口同級。但是Map接口并沒有繼承Iterator接口,因此無法迭代。
(分離出Iterator接口是迭代器(Iterator)模式)。但是Map接口又提供了 Set
JAVA的增強for循環也只適用于那些繼承了Iterable接口的。沒有實現這些接口的沒法使用foreach(比如String)
通過分析字節碼可以發現:
java// Compiled from ArrayListTest.java (version 1.5 : 49.0, super bit) public class com.spring.ArrayListTest { // Method descriptor #6 ()V // Stack: 1, Locals: 1 public ArrayListTest(); 0 aload_0 [this] 1 invokespecial java.lang.Object() [8] 4 return Line numbers: [pc: 0, line: 8] Local variable table: [pc: 0, pc: 5] local: this index: 0 type: com.spring.ArrayListTest // Method descriptor #15 ([Ljava/lang/String;)V // Stack: 2, Locals: 4 public static void main(java.lang.String[] args); 0 new java.util.ArrayList [16] 3 dup 4 invokespecial java.util.ArrayList() [18] 7 astore_1 [arrayList] 8 aload_1 [arrayList] 9 ldc[19] 11 invokevirtual java.util.ArrayList.add(java.lang.Object) : boolean [21] 14 pop 15 aload_1 [arrayList] 16 ldc [25] 18 invokevirtual java.util.ArrayList.add(java.lang.Object) : boolean [21] 21 pop 22 aload_1 [arrayList] 23 ldc [27] 25 invokevirtual java.util.ArrayList.add(java.lang.Object) : boolean [21] 28 pop 29 aload_1 [arrayList] 30 ldc [29] 32 invokevirtual java.util.ArrayList.add(java.lang.Object) : boolean [21] 35 pop 36 aload_1 [arrayList] 37 invokevirtual java.util.ArrayList.iterator() : java.util.Iterator [31] 40 astore_3 41 goto 60 44 aload_3 45 invokeinterface java.util.Iterator.next() : java.lang.Object [35] [nargs: 1] 50 checkcast java.lang.String [41] 53 astore_2 [string] 54 aload_1 [arrayList] 55 aload_2 [string] 56 invokevirtual java.util.ArrayList.remove(java.lang.Object) : boolean [43] 59 pop 60 aload_3 61 invokeinterface java.util.Iterator.hasNext() : boolean [46] [nargs: 1] 66 ifne 44 69 return Line numbers: [pc: 0, line: 14] [pc: 8, line: 15] [pc: 15, line: 16] [pc: 22, line: 17] [pc: 29, line: 18] [pc: 36, line: 19] [pc: 54, line: 20] [pc: 60, line: 19] [pc: 69, line: 24] Local variable table: [pc: 0, pc: 70] local: args index: 0 type: java.lang.String[] [pc: 8, pc: 70] local: arrayList index: 1 type: java.util.ArrayList [pc: 54, pc: 60] local: string index: 2 type: java.lang.String Local variable type table: [pc: 8, pc: 70] local: arrayList index: 1 type: java.util.ArrayList }
增強for循環就是使用的迭代器來循環。
在迭代的過程中間如果修改集合本身導致了集合size發生變化,將會拋出java.util.ConcurrentModificationException異常。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64342.html
集合介紹 本節介紹Java集合框架,在這里,你將了解集合是什么以及它們如何使你的工作更輕松、程序更好,你將了解構成Java集合框架的核心元素 — 接口、實現、聚合操作和算法。 集合 — 有時稱為容器 — 只是一個將多個元素組合到一個單元中的對象,集合用于存儲、檢索、操作和傳遞聚合數據。通常,它們代表形成自然組的數據項,例如撲克牌(卡片集合)、郵件文件夾(信件集合)或電話目錄(名稱到電話號碼的映射)...
摘要:基礎部分集合框架接口接口泛型所有集合類都位于包下。集合框架的知識總結集合框架總結接口的使用集合框架總結類的排序問題聲明常量的兩種方法遍歷的四種方法泛型當我們把一個對象放入集合中后,系統會把所有集合元素都當成類的實例進行處理。 Java 基礎部分——集合框架 Collection 接口 Map 接口 泛型 所有集合類都位于java.util包下。集合中只能保存對象(保存對象的...
摘要:第三階段常見對象的學習集合框架概述和集合的遍歷一集合框架的概述集合的由來如果一個程序只包含固定數量的且其生命周期都是已知的對象,那么這是一個非常簡單的程序。進而它們的遍歷方式也應該是不同的,最終就沒有定義迭代器類。 第三階段 JAVA常見對象的學習 集合框架概述和集合的遍歷 (一) 集合框架的概述 (1) 集合的由來 如果一個程序只包含固定數量的且其生命周期都是已知的對象,那么這是一...
摘要:集合工具包是在包中,實現了數據結構數組棧鏈表隊列映射和集合。集合主要可以劃分為個部分列表集合映射工具類迭代器枚舉類和。集合的框架圖如下圖片來源集合頂層接口主要有和。和都是集合遍歷相關接口,是特有的遍歷工具接口 Java集合工具包是在java.util.*包中,實現了數據結構:數組、棧、鏈表、隊列、映射和集合。Java集合主要可以劃分為4個部分:List列表、Set集合、Map映射、工具...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據一系列常見的多線程設計模式,設計了并發包,其中包下提供了一系列基礎的鎖工具,用以對等進行補充增強。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發于一世流云專欄:https...
閱讀 900·2021-11-22 12:04
閱讀 2102·2021-11-02 14:46
閱讀 624·2021-08-30 09:44
閱讀 2107·2019-08-30 15:54
閱讀 728·2019-08-29 13:48
閱讀 1597·2019-08-29 12:56
閱讀 3451·2019-08-28 17:51
閱讀 3287·2019-08-26 13:44