Java ListIterator关于逆向迭代器的问题?
    List list=new ArrayList();
    list.add(new Student("list1",16));
    list.add(new Studetn("list2",17));
    ListIterator it=list.ListIterator();
    //hasNext()返回的值
    System.out.println(it.hasNext());
    //正向遍历列表
    while(it.hasNext()){
         Student stu=(Student)it.next();
            if(stu.getName().equals("list1"))
                it.add(new Student("list2",17));
                System.out.println(stu);
    }

    /*
        it.add(new Student("list4"),19);
        System.out.println(it.hasPrevious());
    */
    //逆向遍历列表
    while(it.hasPrevious){
         Student stu=(Student)it.previous();
                System.out.println(stu);
    }

这段代码,运行结果为:

true
Student [name=list1,age=16]
Student [name=list2,age=17]
Student [name=list3,age=18]
//如果保留那段注释,程序到这里就结束了
//如果去掉注释,那么
true
Student [name=list4,age=19]

所以为什么正向迭代返回true,逆向需要再用迭代器add一次后才可以返回
true

0

2个回答

老哥,我在机子上试了你的代码,你的代码不太对劲。
hasNext()和next()是一对,hasPrevious()和previous(),所以你逆向遍历时,取值应该用previous,正向遍历到最后一项后,光标会在最后一项后,然后再逆向就没问题。

1
u011126065
jasondyoung 回复qq_37384180: 是的。
6 个月之前 回复
qq_37384180
斌binnid 虽说我发现我的代码和网页上的不一样,网页上的打错了,不过谢谢你后面的讲解。所以意思是一开始光标在开头,然后正向遍历后,等光标处于最后一项的时候,这时候逆向才会正确?是这个意思吗?
7 个月之前 回复

每个容器中有个reverse吗?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
SORT的逆序,和Listiterator逆向迭代
iterator只能向前迭代 List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,ListIterator比Iterator增加了向后迭代的功能 不过在使用ListIterator迭代时,开始也需要正向迭代,然后在倒序迭代 public class Test { pub
List逆向遍历、反向遍历--Iterator详解
List逆向遍历、反向遍历–Iterator详解概述在使用java集合的时候,都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的时候可以使用。这两种迭代器有什么区别呢?下面我们详细分析。这里有一点需要明确的时候,迭代器指向的位置是元素之前的位置,如下图所示: 这里假设集合List由四个元素L
Java类集框架——Iterator和ListIterator 迭代器的使用(遍历集合)
学习目标: 掌握集合输出的标准操作。 掌握Iterator接口的主要作用及使用注意事项。 掌握ListIterator与Iterator接口的关系及区别。 掌握ListIterator接口的使用限制。 在集合的操作中支持以下几种方式:  Iterator  ListIterator  foreach输出  Enumeration输出 Iterator接口简介 集合输出
【JAVA语法】持有对象--Java中迭代器listIterator的用法
写在前面:    我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。                                                                                                  ...
listIterator迭代器实现向前向后遍历
      我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(跌代器)。  使用跌代器,你不需要干涉其遍历的过程,只需要每次取出一个你想要的数据进行处理就可以了。但是在使用的时候也是有不同的。  List和Set都有iterator()来取得其迭代器。对List来说,你也可以通过listIterator()取得其迭代器,两种迭代器在有些时候是不能通用的,I...
ListIterator中next()与previous()方法以及add()方法的初步理解与练习
    /*练习14    //以下我创建了一个方法  该方法实现的功能为将每个元素加入到list容器中的中间位置//用到的内容主要为  :    迭代器中单独的add方法//                      该方法可将元素插入到指针所指的位置//                      通过调用该next()与previous()方法改变指针的位置来改变元素的插入位置 //     ...
java iterator如何倒序输出
iterator只能向前迭代 List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,ListIterator比Iterator增加了向后迭代的功能 不过在使用ListIterator迭代时,开始也需要正向迭代,然后在倒序迭代 public class Test { publi
Java 集合中关于Iterator 和ListIterator的详解
1.IteratorIterator的定义如下:public interface Iterator<E> {}Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口如下:forEachRemaining(Consumer<? super E> action):为每个剩余元素执行给定的操作,直到所有的元素...
使用ListIterator双向遍历集合
使用ListIterator双向遍历集合 @Test public void linkedListListIteratorTest(){ List< String > staff = new LinkedList(); staff.add ( "Amy" ) ; staff.add ( "Bob" ) ; staff.add ( "nCarl" )...
迭代器ListIterator使用及并发修改List集合
有一个集合,判断里面有没有"world"这个元素, 如果有,我就添加一个"java"元素,请写代码实现。 接口 ListIterator 所有超级接口:  Iterator  public interface ListIterator extends Iterator 系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。 ListIt
集合框架listIterator() //返回此列表元素的列表迭代器(按适当顺序)。listIterator(int index) //返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
Collection接口中有三个子接口(List,Set,Queue) Collection中的方法:   addAll(Collection<? extends E> c) addAll(int index, Collection<? extends E> c) clear() contains(Object o) containsAll(Collecti...
java集合中list集合基本用法及List集合特有的迭代器ListIterator
/* Collection |--List:元素是有序的,元素可以重复。因为该集合体系有索引。 |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。 |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。 |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
Java中List迭代器遍历元素(ListItertator逆向遍历)
public class Demo { public static void main(String[] args) { List list = new ArrayList(); list.add("hello"); list.add("world"); list.add("java"); //方式一 for(int i=0;i<list.size()...
Java 集合源码解析(2):ListIterator
ListIterator根据官方文档介绍, ListIterator 有以下功能: 允许我们向前、向后两个方向遍历 List; 在遍历时修改 List 的元素; 遍历时获取迭代器当前游标所在位置。 注意,迭代器 没有当前所在元素一说,它只有一个游标( cursor )的概念,这个游标总是在元素之间,比如这样:初始时它在第 0 个元素之前,调用 next() 游标后移一位:调用 previous()
java-collection的 iterator 返回的迭代器快速失败
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class TreeMapTest { public static void main(String[] ar
(63)ListIterator用法、List均有的增删改查
一、List:带角标操作 二、集合增改查 二、若迭代器进行增删改查用ListLterator
为什么ArrayList在使用迭代器迭代元素时不能使用List.remove()删元素,而是使用Iterator.remove()删元素
其实,我相信有一定经验的都已经知道了,把标题的“为什么”去掉读一遍,但是具体是为什么?今天本人跟进源码(jdk7)探了个究竟。注:这篇文章只介绍使用list.remove()抛出ConcurrentModificationException的原因,其它参数及异常不作介绍。直入主题,首先我们来看下面这段出问题的代码下面是运行结果使用iterator.remove()是没有问题的,此处就不粘图了由运行...
List集合特有的迭代器,ListIterator
List集合特有的迭代器,ListIterator是Iterator的子接口 /** * @author gaobin *什么是迭代器呢? *其实就是集合的取出方式 *如同抓娃娃游戏机中的夹子 *迭代器是取出方式,会直接访问集合中的元素所以将迭代器通过内部类的形式来进行描述 *通过容器的iterator()方法获取该内部类的对象。 *List集合特有的迭代器,ListIterat
Java学习篇之迭代器并发修改异常问题
迭代器并发修改异常的问题
java集合之列表迭代器ListIterator
在操作集合时,常常使用数组和动态的ArrayList(数组列表,因为ArrayList的底层实现是通过数组来实现的)类,但是,数组和数组列表在操作的时候有一个重大缺陷,如:在数组中删除一个元素时,当元素被删除后将导致该元素后面的元素都要想数组的前端移动;在数组中插入一个元素时,将导致该元素相邻的元素都要向后移动,所以这一系列的操作将会大大的消耗系统的性能。     数组在连续的存储位置上存放的是
Iterator迭代器-ListIterator-Enumeration枚举类接口的特点和区别
Iterator迭代器-ListIterator-Enumeration枚举类接口的特点和区别 1、Iterator的特点:     API中是这样解释的: 对collection进行迭代的迭代器。它取代了Enumeration.迭代器与枚举有两点不同: A.迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的collection移除元素。 B.在方法名上得到了改进。
ListIterator的双向遍历
package com.list; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class demo4_list { public static void main(String[] args) { List l=new ArrayL
Iterator循环删除list中元素
一、业务场景 当我们需要剔除list中的某些元素时,通常的做法就是循环遍历list,然后符合条件时remove掉该元素。 一、实现逻辑 for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) { String str=iterator.next(); if (Obje...
List集合的迭代神器ListIterator
一 ListIterator迭代器的概述 ListIterator与Iterator接口不同,它不仅可以向后迭代,它还可以向前迭代。 ListIterator相对Iterator增加了如下3个方法: boolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素。 Object previous():返回该迭代器的上一个元素。 void add():在指定位置插入一
使用ListIterator 对List遍历时修改,删除
使用ListIterator实现对List进行遍历时修改,以及List的反向遍历
Java中迭代器所引发的思考(List中迭代器的存在一直是使我迷茫的一个点)
正像题目所说,我刚开始学Java接触到集合的时候,发现里面有个迭代器,不准确的说应该是我同学告诉我里面有个迭代器,然后说的很屌的样子。But,说实话,我真心觉得这个迭代器的存在简直是不可理解,比Java的泛型还扯淡,没有丝毫存在的价值。里面的迭代我完全可以自己写一个简单方法用来实习嘛,无非就遍历一下集合给我个这么复杂的方式干嘛。当时因为心思浮躁我就自欺欺人的告诉自己这属于一种设计模式。
java_关于集合(Collection接口,List接口及其子类,Iterator迭代器接口)
(一)集合概念:用于存储多个对象的单一对象(容器),存储的数据叫元素.元素都是引用类型 PS:容器内存储的都是对象的地址; 用于模拟现实生活中的容器,因此集合类型,不单是一种,有很多类型设计成各种存储的数据结构,这种类型叫做集合框架 元素:必须是引用数据类型的数据,不能是基本数据类型的数据,可以是包装类 JDK1.5新特性: 1.5前容器可以存储Object的任何子类型,但...
反向迭代器reverse_iterator与正向迭代器iterator之间的转换(list反向删除元素的方法)
首先,本文的公众号地址为:你真的会清理std::list的元素吗? 刚开通公众号,请求大家关注一下,谢谢大家。公众号二维码如下:有经验的程序员都知道,list是链表,可以遍历删除,删除的过程类似于以下代码(遍历删除521):int key=521;//程序员就不要爱情了吧 list::iterator it=l.begin();//l为std::list for (; it != l.en
Java集合详解3:Iterator,fail-fast机制与比较器
今天我们来探索一下LIterator,fail-fast机制与比较器的源码。 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下哈 文章首发于我的个人博客: https://h2pl.github.io/2018/05/9/collection3 更多关于Java后端学习的内容请到我的CSDN博客上查看:http...
简单说说 Iterator 和 ListIterator 的区别?
:区别主要如下。ListIterator 有 add() 方法,可以向 List 中添加对象,而 Iterator 不能。ListIterator 和 Iterator 都有 hasNext() 和 next() 方法,可以实现顺序向后遍历,但是 ListIterator 有 hasPrevious() 和 previous() 方法,可以实现逆向(顺序向前)遍历,Iterator 就不可以。Li...
关于使用Iterator删除List中的多个元素
今天在写代码时要删除List中的多个元素时犯了一个很搞笑的错误,等效的就是以下代码 public static void main(String[] args) { List<String> a = new ArrayList<String>(); a.add("1"); a.add("2"); a.add("3");
java迭代器模式实现正反向遍历
用java编写的迭代器,实现10数字正反向遍历。
Java 中list集合 通过Iterator方法迭代数组
Java 中list集合 通过Iterator方法迭代数组
List集合ListIterator和Iterator迭代器区别与用法
ListIterator是Iterator的子接口,是List集合特有的迭代输出接口,它可以实现在迭代过程中对元素的增删改查。在使用Iterator迭代过程中,不要使用集合操作元素,容易出现异常,demo1:package com.wql;import java.util.ArrayList; import java.util.Iterator; import java.util.ListItera
list集合在用iterator迭代时,修改集合长度, 不一定会引发异常
import java.util.ArrayList; import java.util.List; public class IteratorTest { public static void main(String[] args) { /* * list集合在用iterator迭代时,修改集合长度, 不一定会引发 * ConcurrentModificationExcep
集合(Collection)与迭代器(Iterator)
集合(Collection)与迭代器(Iterator)这个大家都应该是不陌生了,我本来想介绍一下,不过,我想了一下,我说的,绝对没有《Think In Java》说的好,所以我就引用下面的话,然后,我举例测试,并附代码于后。  测试用例:import java.util.ArrayList;import java.util.Collection;i
Java Iteraor迭代器详解
迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部. 1.Iterator         Java提供一个专门的迭代器>Iterator,我们可以对某个序列实现该interface,来提供标准的Java迭代器。Iterator接口实现后的功能是“使用”一个迭代
Iterator使用及ArrayList遍历注意事项
Iterator使用及ArrayList遍历注意事项
C++模拟实现容器list(含迭代器)
list同之前实现过的容器vector类似,都是STL众多容器中的一个。STL中实现的链表是带头结点的双向循环链表,这种链表相比于之前我们在C语言和C++初级阶段模板实现的链表或者双向链表更加的方便,更加方便的遍历,方便查找,方便各种操作。 在vector中,我们是用一个原生态的指针来当做迭代器,但是在list中我们只能对指针进行封装来实现迭代器。 list的基本结构就如上图所示,接下来看看
遍历删除List中的元素,会报错? 用iterator.remove() 完美解决
经常会碰到遍历集合,然后删除里面的对象报错, 纠结半天, 百度了一下,有大神说不能用for-each,  for , 只能用迭代器,真的吗?  我就删成功了呢,看代码,请大神们指正!  public static void main(String[] args) { //添加 List names = new ArrayList();
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java迭代器学习 关于java培训班