• JAVA-初步认识-常用对象API(集合框架-ListIterator接口)


    一.

    把list往外取的动作也说一下,(有可能说的是从list中取出元素的动作)。

    从list中取出所有的元素,采用iterator,因为list属于Colletion的子类,Colletion中具备的东西list也都有。(上面的截图中list只是一个空的容器,然后不断地往里面添加元素,或者删减元素)返回了iterator是怎么理解

    DOS结果没有任何问题。

    list有自己特有的元素取出方式,list.get(index),输入集合中的某一个角标值,打印出来的结果就是该角标上的元素。

    如果是取出所有的元素,就是如下图所示。带着角标,就和数组的操作是一样的。(list中没有写length,为什么不写length而写size)

    只有它具备这种取出方式,set不具备,set只有iterator。

    现在接着取集合中的元素,换一种形式来操作,将迭代器拿来借用一下。不直接做输出动作,而是设置一个对象来接收返回的元素。

    存的时候,add方法参数列表中通过多态的知识点,往里面存的任意对象都被提升被object类了。

    DOS结果有两个疑问,一是为什么会有next:abc1出现,二是为什么会有异常出现?

    没见过这个包,要学会去查阅API文档,去util包中的异常中,搜索ConcurrentModificationException。

     

    什么是并发修改?这是我们开发中常出现的问题。

    问题的原因是:list集合中往里面存了三个元素,存一次集合的长度就扩展一次。存了三个,长度就为三。在长度为三的集合中,我们调用了它的迭代器,Iterator it=it.iterator();这时候迭代器的值是三,换句话说,这个时候调用迭代器,迭代器只知道集合中有三个元素。迭代器就按照三个元素的方式开始了取出。在后面的判断中,集合添加了元素abc9,扩展了长度,但是迭代器不知道。迭代器迭不迭代这个元素是搞不清楚的,因为现在是迭代器在操作这些元素,而在迭代器操作的过程中,又在用集合操作这个元素(list.add("abc9"))。操作迭代器,迭代器是一个对象,集合也是一个对象,两者不是同一个东西。集合和迭代器同时在对这个元素进行修改。就会导致迭代出问题。这就是产生异常的原因。

    该如何解决此异常。如果一定要在操作时,进行判断,往list集合中添加元素,那怎么修改?既然迭代和集合同时访问,造成了并发。那么,使用集合操作的时候,不迭代。使用迭代操作时,不集合,别冲突就是。在迭代操作时不用集合,那么只能用迭代操作(意思是用迭代来添加元素),反正只有两种操作方式,要么集合,要么迭代,迭代来自于集合。所以,迭代的时候,集合不能参与,迭代完了再说。但是迭代中只有三个方法,一个判断有没有,一个是获取,最后一个是删除,并没有添加的方法。

    迭代器本身有局限性,迭代器下面有子接口,listIterator列表迭代器。

    子接口中提供了添加的方法,修改,获取,删除,判断。怎么拿到子接口对象呢?list集合中还有一个方法没有介绍,就是ListIterator(),根据这个方法可以拿到列表迭代器。这个迭代器,只有list有(整个集合框架体系中,都有迭代器的存在)。

    listIterator接口中还有一些其他的方法。

    hasPrevious方法是判断前面是否有元素。

    遍历完了之后,hasNext的结果是false,而hasPrevious的结果则是true。因此,这里迭代器可以往前走。

    DOS结果中竖着的abc3,abc9,abc1就是hasNext的方法(不是3,2,1,是因为前面采用了set方法,改掉了0角标的元素)。

  • 相关阅读:
    实例属性 类属性 实例域 类域
    研究数据集
    static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符
    accessor mothod mutator mothod 更改器方法 访问器方法 类的方法可以访问类的任何一个对象的私有域!
    上钻 下钻 切片 转轴 降采样
    识别会话
    Performance Tuning Using Linux Process Management Commands
    Secure Hash Algorithm 3
    grouped differently across partitions
    spark 划分stage Wide vs Narrow Dependencies 窄依赖 宽依赖 解析 作业 job stage 阶段 RDD有向无环图拆分 任务 Task 网络传输和计算开销 任务集 taskset
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/8150429.html
Copyright © 2020-2023  润新知