资讯专栏INFORMATION COLUMN

JAVA 集合框架

galaxy_robot / 3087人阅读

摘要:接口下面包含等。但是接口并没有继承接口,因此无法迭代。分离出接口是迭代器模式。但是接口又提供了接口以后将转换成集合来迭代。的增强循环也只适用于那些继承了接口的。

Iterator接口是Collection接口的父接口。Collection接口下面包含List,Set,Queue等。
Map接口与Collection接口同级。但是Map接口并没有继承Iterator接口,因此无法迭代。
(分离出Iterator接口是迭代器(Iterator)模式)。但是Map接口又提供了 Set> 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异常。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64342.html

相关文章

  • Java™ 教程(集合介绍)

    集合介绍 本节介绍Java集合框架,在这里,你将了解集合是什么以及它们如何使你的工作更轻松、程序更好,你将了解构成Java集合框架的核心元素 — 接口、实现、聚合操作和算法。 集合 — 有时称为容器 — 只是一个将多个元素组合到一个单元中的对象,集合用于存储、检索、操作和传递聚合数据。通常,它们代表形成自然组的数据项,例如扑克牌(卡片集合)、邮件文件夹(信件集合)或电话目录(名称到电话号码的映射)...

    taoszu 评论0 收藏0
  • Java 集合框架

    摘要:基础部分集合框架接口接口泛型所有集合类都位于包下。集合框架的知识总结集合框架总结接口的使用集合框架总结类的排序问题声明常量的两种方法遍历的四种方法泛型当我们把一个对象放入集合中后,系统会把所有集合元素都当成类的实例进行处理。 Java 基础部分——集合框架 Collection 接口 Map 接口 泛型 所有集合类都位于java.util包下。集合中只能保存对象(保存对象的...

    Flink_China 评论0 收藏0
  • Java集合框架概述和集合的遍历

    摘要:第三阶段常见对象的学习集合框架概述和集合的遍历一集合框架的概述集合的由来如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。进而它们的遍历方式也应该是不同的,最终就没有定义迭代器类。 第三阶段 JAVA常见对象的学习 集合框架概述和集合的遍历 (一) 集合框架的概述 (1) 集合的由来 如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一...

    happyhuangjinjin 评论0 收藏0
  • 集合框架知识系列01 总体框架

    摘要:集合工具包是在包中,实现了数据结构数组栈链表队列映射和集合。集合主要可以划分为个部分列表集合映射工具类迭代器枚举类和。集合的框架图如下图片来源集合顶层接口主要有和。和都是集合遍历相关接口,是特有的遍历工具接口 Java集合工具包是在java.util.*包中,实现了数据结构:数组、栈、链表、队列、映射和集合。Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具...

    honhon 评论0 收藏0
  • Java多线程进阶(一)—— J.U.C并发包概述

    摘要:整个包,按照功能可以大致划分如下锁框架原子类框架同步器框架集合框架执行器框架本系列将按上述顺序分析,分析所基于的源码为。后,根据一系列常见的多线程设计模式,设计了并发包,其中包下提供了一系列基础的锁工具,用以对等进行补充增强。 showImg(https://segmentfault.com/img/remote/1460000016012623); 本文首发于一世流云专栏:https...

    anonymoussf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<