摘要:接口下面包含等。但是接口并沒有繼承接口,因此無法迭代。分離出接口是迭代器模式。但是接口又提供了接口以后將轉(zhuǎn)換成集合來迭代。的增強(qiáng)循環(huán)也只適用于那些繼承了接口的。
Iterator接口是Collection接口的父接口。Collection接口下面包含List,Set,Queue等。
Map接口與Collection接口同級。但是Map接口并沒有繼承Iterator接口,因此無法迭代。
(分離出Iterator接口是迭代器(Iterator)模式)。但是Map接口又提供了 Set
JAVA的增強(qiáng)for循環(huán)也只適用于那些繼承了Iterable接口的。沒有實(shí)現(xiàn)這些接口的沒法使用foreach(比如String)
通過分析字節(jié)碼可以發(fā)現(xiàn):
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 }
增強(qiáng)for循環(huán)就是使用的迭代器來循環(huán)。
在迭代的過程中間如果修改集合本身導(dǎo)致了集合size發(fā)生變化,將會拋出java.util.ConcurrentModificationException異常。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64342.html
集合介紹 本節(jié)介紹Java集合框架,在這里,你將了解集合是什么以及它們?nèi)绾问鼓愕墓ぷ鞲p松、程序更好,你將了解構(gòu)成Java集合框架的核心元素 — 接口、實(shí)現(xiàn)、聚合操作和算法。 集合 — 有時稱為容器 — 只是一個將多個元素組合到一個單元中的對象,集合用于存儲、檢索、操作和傳遞聚合數(shù)據(jù)。通常,它們代表形成自然組的數(shù)據(jù)項(xiàng),例如撲克牌(卡片集合)、郵件文件夾(信件集合)或電話目錄(名稱到電話號碼的映射)...
摘要:基礎(chǔ)部分集合框架接口接口泛型所有集合類都位于包下。集合框架的知識總結(jié)集合框架總結(jié)接口的使用集合框架總結(jié)類的排序問題聲明常量的兩種方法遍歷的四種方法泛型當(dāng)我們把一個對象放入集合中后,系統(tǒng)會把所有集合元素都當(dāng)成類的實(shí)例進(jìn)行處理。 Java 基礎(chǔ)部分——集合框架 Collection 接口 Map 接口 泛型 所有集合類都位于java.util包下。集合中只能保存對象(保存對象的...
摘要:第三階段常見對象的學(xué)習(xí)集合框架概述和集合的遍歷一集合框架的概述集合的由來如果一個程序只包含固定數(shù)量的且其生命周期都是已知的對象,那么這是一個非常簡單的程序。進(jìn)而它們的遍歷方式也應(yīng)該是不同的,最終就沒有定義迭代器類。 第三階段 JAVA常見對象的學(xué)習(xí) 集合框架概述和集合的遍歷 (一) 集合框架的概述 (1) 集合的由來 如果一個程序只包含固定數(shù)量的且其生命周期都是已知的對象,那么這是一...
摘要:集合工具包是在包中,實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)數(shù)組棧鏈表隊(duì)列映射和集合。集合主要可以劃分為個部分列表集合映射工具類迭代器枚舉類和。集合的框架圖如下圖片來源集合頂層接口主要有和。和都是集合遍歷相關(guān)接口,是特有的遍歷工具接口 Java集合工具包是在java.util.*包中,實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu):數(shù)組、棧、鏈表、隊(duì)列、映射和集合。Java集合主要可以劃分為4個部分:List列表、Set集合、Map映射、工具...
摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見的多線程設(shè)計模式,設(shè)計了并發(fā)包,其中包下提供了一系列基礎(chǔ)的鎖工具,用以對等進(jìn)行補(bǔ)充增強(qiáng)。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首發(fā)于一世流云專欄:https...
閱讀 901·2021-11-22 12:04
閱讀 2106·2021-11-02 14:46
閱讀 626·2021-08-30 09:44
閱讀 2110·2019-08-30 15:54
閱讀 731·2019-08-29 13:48
閱讀 1598·2019-08-29 12:56
閱讀 3454·2019-08-28 17:51
閱讀 3290·2019-08-26 13:44