博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 集合框架
阅读量:5942 次
发布时间:2019-06-19

本文共 2875 字,大约阅读时间需要 9 分钟。

Iterator接口是Collection接口的父接口。Collection接口下面包含List,Set,Queue等。

Map接口与Collection接口同级。但是Map接口并没有继承Iterator接口,因此无法迭代。
(分离出Iterator接口是迭代器(Iterator)模式)。但是Map接口又提供了 Set<Map.Entry<K, V>> entrySet()接口以后将map转换成Set集合来迭代。Map集合是key-value形式。所以将一个键值对组合成一个Entry才能迭代。
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://pvqtx.baihongyu.com/

你可能感兴趣的文章
赫夫曼编码实现
查看>>
html页面显示div源代码
查看>>
基础复习-算法设计基础 | 复杂度计算
查看>>
debian、ubuntu系统下,常用的下载工具
查看>>
带以太网的MicroPython开发板:TPYBoardv201温湿度上传实例
查看>>
如何解压缩后缀名为zip.001,zip.002等的文件
查看>>
OSGI企业应用开发(十二)OSGI Web应用开发(一)
查看>>
Python 以指定概率获取元素
查看>>
微信公众平台图文教程(二) 群发功能和素材管理
查看>>
关于System.Collections空间
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
Centos 7.5 部署DNS
查看>>
yum简介
查看>>
cp讲解
查看>>
MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)
查看>>
如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表?
查看>>
论代码审查的重要性
查看>>
「docker实战篇」python的docker爬虫技术-导学(一)
查看>>
如何确定一个网站是用Wordpress开发的
查看>>
我的友情链接
查看>>