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

2个回答

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

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

每个容器中有个reverse吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ListIterator()迭代器指向问题!
import java.util.*; rn rn public class ListIteratorDemo rn public static void main(String[] args) rnrn List list1 = new ArrayList(); rn list1.add("one"); rn list1.add("two"); rn list1.add("three"); rn rn ListIterator it = list1.listIterator(); rnrnwhile(it.hasNext())rn System.out.println("next()element = "+it.nextIndex());rn System.out.println("next()element = "+it.next());rn rnrnwhile(it.hasPrevious())rn System.out.println("Previous()element = "+it.previousIndex());rnSystem.out.println("Previous()element = "+it.previous());rnrnrn rn rn rnrnrn输出结果是:rnnext()element = 0rnnext()element = onernnext()element = 1rnnext()element = twornnext()element = 2rnnext()element = threernrnPrevious()element = 2rnPrevious()element = threernPrevious()element = 1rnPrevious()element = twornPrevious()element = 0rnPrevious()element = onernrn我不明白的是 第1个while循环 迭代器应该已经指向了 最后1个元素 也就是three 索引号2 这个元素rn那么到了第2个while循环的首个Previous()应该指向到two 索引号1这个元素才对呀..也就是 第2个循环只输出2个元素才对? 为什么还能输出3个呢?rnrnJAVA新手..CSDN的高手们教我下吧..
ListIterator逆向迭代
public class Test2 { public static void main(String[] args) { //单列集合中只有listIterator是可逆向迭代器, //它是Iterator的子类。 int[] arr = {2,4,5,6,2,3,4};//创建一个int数组,并进行静态初始化数据 List<Integer> a = new...
Iterator、ListIterator迭代器源码分析
一、迭代器 迭代器是一种设计模式,提供了一种方法来对集合、容器进行遍历的方式。不需要关注底层的数据结构和数据类型,来达到底层和上层的遍历解耦的目的。 迭代器提供了三种方法,对集合进行遍历: 1. boolean hasNext(); 判断集合是否还有元素,有则返回ture,没有返回false。 2. E next(); 返回下一个元素,返回当前元素的数据类型, ...
ListIterator迭代器的使用
public class Unite8_Iterator { public static void main (String []mags) { //给数组初始化 String []arr = new String[]{"good","morning","dear","ladys","and","gentalmen"}; //使用List集合 List books = new Ar
listIterator迭代器的学习
在看listIterator迭代器之前,我们先来总结一下它与iterator迭代器的相同点和不同点。 相同点: 1)都是迭代器,在对集合进行遍历时都可以使用。 2)都有hashNext和next方法,都能顺序遍历。 3)都可以实现删除操作。 说的更直白一点的话,就是iterator有的方法功能,listIterator都包含了,因为它会继承iterator在list的实现类。 那我们就...
集合迭代器 listIterator()
直接来看代码: 1、遍历 注意获取listIterator迭代器之后,必须调用next()方法,才算进入到list的第一个元素。代码中 iter,next(),就是为了让迭代器只向list的第一个元素。所以,可以理解成,直接获取迭代器后,迭代器的对象指向的是一个head节点,它的下一个才是开始遍历的元素。 import java.util.LinkedList; import java.ut
#Java集合--ListIterator和Iterator迭代器的联系与区别
List的listIterator()方法会返回一个ListIterator迭代器对象,该迭代器的功能和Iterator迭代器基本相同,基本使用如下所示: ListIterator<String> iterator = list.listIterator(); for(;iterator.hasNext();){ String value = iterator.next(); S...
Java 集合系列(3): ListIterator迭代器
package java.util; /** * @author Josh Bloch * @see Collection * @see List * @see Iterator * @see Enumeration * @see List#listIterator() * @since 1.2 */ public interface ListIterator<E&...
SORT的逆序,和Listiterator逆向迭代
iterator只能向前迭代 List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,ListIterator比Iterator增加了向后迭代的功能 不过在使用ListIterator迭代时,开始也需要正向迭代,然后在倒序迭代 public class Test { pub
List集合特有迭代器ListIterator
ListIterator 迭代器继承于Iterator. public interface ListIterator extends Iterator ---|Iterator        hasNext()        next()        remove()       ------| ListIterator Iterator子接口List专属的迭代器      
关于std::listiterator问题
rnclass Buddyrnrnpublic:rn Buddy()rn x =0.0,y = 0.0;rnrn//get and set methodrnprivate:rn double x,y;rnrnrnlist::iterator iter;rnfor(iter = list1->begin(); iter!=list1->end; iter++)rn if(iter->getX() * (iter+1)->getX() <0)rn........rnrnrn我先在for循环体里面求list相邻的两个数相乘小于零rn但是我碰到的问题是没有这样的形式rn比如 (iter+1)就出错了,谢谢帮忙。
关于ListIterator的问题
[code=Java]rn List list=new ArrayList();rn for(int i=0;i<10;i++)rn rn list.add(new Integer(i));rn rnrn ListIterator listit=list.listIterator();rn while(listit.hasPrevious())rn rn System.out.println(listit.previous());rn rn[/code]rn我是想用ListIterator中的previous()方法,把元素倒着打印出来。可是什么也出不来,代码哪里写错了吗?请各位朋友帮忙看看,谢谢啦!:)
java关于迭代器的问题
private List li;这个为什么会错呢?请高手看看rn
Reverse Iterators(逆向迭代器)
reverse iterator是STL中第三种预定义的迭代器适配器,该迭代器将以逆方向的进行所有的操作,它将递增运算(++)转换为递减运算(--),反之亦然。同时所有的容器都可以通过成员运算符rebegin()和rend()产生出 reverse iterators,也就是...
【JAVA语法】持有对象--Java中迭代器listIterator的用法
写在前面:    我也是一名java语言的爱好者,仅以此文作为学习的记录,对于文中出现的代码规范,代码格式,算法效率等问题,希望各路大神不吝赐教,在下感激不尽。同是学习的同学也同样希望互相交流,取长补短。                                                                                                  ...
逆向迭代器的使用疑问?
一直不会使用,逆向迭代器,不知道该怎么声明或者使用rn比如一个vector data;rn声明他的逆向迭代器该是怎么样呢?这样typedef vector::iterator iter; rn还是这样typedef vector::reverse_iterator iter;rnrn然后用原始一点的方法逆向遍历rnfor (iter iter1=data.rbegin(), iter1!=data.rend, iter++)rn这样行不行? 为什么会老出错呢?
Iterator和ListIterator两种迭代器的简介和区别
Iterator: 可用于所有Collection. 方法: hasNext():如果仍有元素可以迭代,则返回true. next():返回迭代的下一个元素 ,可以重复调用此方法来迭代此列表. remove():从迭代器指向的 collection 中移除迭代器返回的最后一个元素。每次调用next只能调用一次此方法. while: Iterator&lt;Integer&...
ListIterator 迭代器中的返回索引的 previousIndex() 方法
[code=Java]import java.util.*;rnclass ListIteratorDemo01 rn public static void main(String[] args) rn List li01 = new ArrayList();rn li01.add("abc01");rn li01.add("abc02");rn li01.add("abc03");rn li01.add("abc04");rnrn int index = indexOf(li01, "abc03");rn print("index = " + index);rnrn rn //返回将要检查的元素的索引rn public static int indexOf(List list, String str) rn for(ListIterator it = list.listIterator(); it.hasNext();) rn if(str == null ? it.next() == null : str.equals(it.next())) rn return it.previousIndex(); //这点不明白rn rn rn return -1; //没找到rn rn public static void print(Object obj) rn System.out.println(obj);rn rn[/code]rnrnint nextIndex() rn返回对 next 的后续调用所返回元素的索引。 rnint previousIndex() rn返回对 previous 的后续调用所返回元素的索引。 rn上面是 nextIndex() 和 previousIndex() 的定义rnrn此题中返回的索引是正确的,但是我没搞明白rnrnit 相当于那个游标,当 it 在索引 1、2 之间时it.next() 等于"abc03",rn此时满足方法里的 if 条件 str.equals(it.next())rn也就是说此处的 "abc03" 在索引 2 的位置上rnrn此时 it 在索引 1、2 之间,如果用 it.nextIndex() 返回的是 3rn但这里使用 it.previousIndex(), 返回的岂不是 "abc02" 对应的索(也就是 1 )吗???rn所以我认为 it.previousIndex() 在此处是 1,不应该是 2。rnrn高手帮解释一下:rn
List集合ListIterator和Iterator迭代器区别与用法
ListIterator是Iterator的子接口,是List集合特有的迭代输出接口,它可以实现在迭代过程中对元素的增删改查。 在使用Iterator迭代过程中,不要使用集合操作元素,容易出现异常,demo1: package com.wql; import java.util.ArrayList; import java.util.Iterator; imp...
迭代器ListIterator使用及并发修改List集合
有一个集合,判断里面有没有"world"这个元素, 如果有,我就添加一个"java"元素,请写代码实现。 接口 ListIterator 所有超级接口:  Iterator  public interface ListIterator extends Iterator 系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。 ListIt
Java容器类源码分析之Iterator与ListIterator迭代器(基于JDK8)
一、基本概念 迭代器是一个对象,也是一种设计模式,Java有两个用来实实现迭代器的接口,分别是Iterator接口和继承自Iterator的ListIterator接口。实现迭代器接口的类的对象有遍历集合对象,选择集合中的元素和删除集合中元素的方法。而在使用它时不必知道该集合对象底层的结构。Java类库中实现Iterator接口的迭代器只能正向遍历集合中的元素,而实现ListIter...
?ListIterator
请问下:当通过ArryList返回的ListIterator, 向它add()后所作用的只是ArrayList,对吗?这跟有关吗?rn谢谢.
【新手求助】关于ListIterator的问题
class Test rn public static void main(String[] args) rn rn List books=new ArrayList();rn rn books.add(new String("java"));rn books.add(new String("android"));rn rn ListIterator lit=books.listIterator();rn while(lit.hasNext())rn rn System.out.println(lit.next());rn lit.add("-----");rn rn rn rnrn按道理应该是java,-----,android,-----,-----这样一直循环下去。rn但lit似乎直接忽略了add()的操作,我知道"-----"肯定存储在books中了,但lit为何迭代不到呢?rn好像只有在下一次迭代才可以,求解!!!
问一个关于ListIterator的问题
我写了下面一段代码为什么有错?rnrnimport java.util.LinkedList;rnimport java.util.ListIterator;rnrnpublic class qefrnrn public static void main(String [] args)rn rn LinkedList TextContent = new LinkedList();rn TextContent.add("1");rn TextContent.add("2");rn TextContent.add("3");rn ListIterator TextContentPoint = LinkedList.listIterator(TextContent.size());rn rnrnrn--------------------配置: --------------------rnE:\Java\qef.java:12: 无法从静态上下文中引用非静态 方法 listIterator(int)rn ListIterator TextContentPoint = LinkedList.listIterator(TextContent.size());rn ^rn注意:E:\Java\qef.java 使用了未经检查或不安全的操作。rn注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。rn1 错误rnrn处理已完成。rn
Java类集框架——Iterator和ListIterator 迭代器的使用(遍历集合)
学习目标: 掌握集合输出的标准操作。 掌握Iterator接口的主要作用及使用注意事项。 掌握ListIterator与Iterator接口的关系及区别。 掌握ListIterator接口的使用限制。 在集合的操作中支持以下几种方式: Iterator ListIterator foreach输出 Enumeration输出 Iterator接口简介 集合输出的标准操作: 在使用集合输出的时候必...
Java  集合5  ListIterator
需求:如果集合中存在 "itcast" 则插入 “java” 代码: package Collection; import java.util.*; /* 需求:根据上一个ListDemo 的练习,提出新的需求。 当集合中存在“itcast” 时,向集合中加入 “Java” */ public class ListIteratorDemo { public static vo...
关于java迭代器的一个问题
我先定义一个Vector test;rn该如何定义test上的两个迭代器:iter1, iter2;rn使得iter1, iter2可以同时处于test上的两个不同位置?
关于java中的迭代器的问题
小弟刚接触到java.直接入题.rn先描述一下问题:rn[color=#FF0000]问题1[/color],在对集合使用迭代器时,不能使用集合本身去移除元素,而可以使用迭代器去移除,这是考虑到java多线程访问集合的导致的不安全的原因.rn这句话对吗?如果对,接着往下看:rn[color=#FF0000]问题2[/color],在使用迭代器取值时,并不是把集合元素本身赋值给迭代器,而是把集合元素的值赋值给了迭代器?rn相信这句话也是对的吧?那么:rn[color=#FF6600]问题3[/color],连续两次使用迭代器时,如果第一次使用时,用iterator移除了集合中的某个元素,那么为什么在第二次使用iterator访问时,输出的元素就少了刚才那个呢??不是说删除的只是iterator从集合中拷贝到的元素吗?为什么还改变了集合呢?rn小弟猜测两点:rn[color=#0000FF]猜测a[/color],同一个集合所有返回的迭代器都是同一个迭代器,第二次使用iterator实际还是第一次删除过元素的那个iterator.rn[color=#0000FF]猜测b[/color],iterator确实修改了集合,那么和问题2不是矛盾吗?rn[color=#FF6600]问题4[/color],对于一个hashMap集合,使用iterator移除了hashMap的键集keySet某个元素之后,在使用iterator访问hashMap的值集values时,发现,与刚才删除的键集里的那个key对应的value也不见了.rn小弟彻底不懂了.代码附上:rnrn[code=Java]package test5_10;rnrnimport java.util.HashMap;rnimport java.util.Iterator;rnimport java.util.Map;rnrn/**rn * 集合的遍历或迭代操作rn * rn * @author yoyoflashrn * rn */rnpublic class Test03 rnrn public static void main(String[] args) rn Map stuMap = new HashMap();rn // 向集合添加元素(键值对的方式添加)rn for (int i = 0; i < 5; i++) rn Student stu = new Student(i, "学生" + i, 18);rn stuMap.put(stu.getId(), stu);rn // int--->Integer-->Objectrn rn System.out.println(stuMap);rnrn // 1.通过foreach,注意,此时要指定遍历的是键集(keySet())还是值集(values())rn System.out.println("通过Map对象的keySet()方法访问键的集合.");rn for (Object key : stuMap.keySet()) rn System.out.println("key:" + key + ",value:" + stuMap.get(key));rn rn System.out.println("************1************");rn System.out.println("通过Map对象的values()方法访问值的集合.");rn for (Object stu : stuMap.values()) rn System.out.println(stu);rn rn System.out.println("************2************");rn // 2.通过迭代器来迭代获取key.rn Iterator it = stuMap.keySet().iterator();rn // 通过hasNext()方法先判断是否有可迭代的元素rn while (it.hasNext()) rn // 再通过next()方法来获取下一个元素.rn Object key = it.next();rn if(key==Integer.valueOf(3))rn System.out.println("key==3");rn it.remove();rn rn System.out.println("------");rn System.out.println("key:"+key);rn rn System.out.println("************3************");rn Iterator it1 = stuMap.keySet().iterator();rn // 通过hasNext()方法先判断是否有可迭代的元素rn while (it1.hasNext()) rn // 再通过next()方法来获取下一个元素.rn Object key = it1.next();rn System.out.println("key:"+key);rn rn System.out.println("************4************");rn // 2.通过迭代器来迭代获取valuern Iterator it2 = stuMap.values().iterator();rn while (it2.hasNext()) rn System.out.println(it2.next());rn rnrn rnrn[/code]rnrn在**2**后,移除了键为3的元素,在**3**后,再次使用iterator迭代访问集合时,不见了那个键为3的元素.在**4**后,访问值集,发现与键为3对应的值不见了.rn请大侠耐心解答一下上面的问题1,2,3,4.解小弟迷惑.万分感谢!!!
ListIterator
JavaSE是Java Standard Edtion的缩写,译成中文就是Java标准版,也是Java的核心。无论是JavaEE(Java企业版)还是JavaME(Java微型版)都是以JavaSE为基础。相当于它就是Java的语法规则。本次课程主要采用基础出发,实战结合的教学方式,对Java SE的多态、封装、继承、类、IO流、多线程等主要语法进行了详细解析,并联系了网络编程特性,内容简单易懂,小白入门进阶的必备课程。
Java 集合框架listIterator接口
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.sun.xml.internal.bind.v2.runtime.reflect.ListIterator; public class ListDemo2 { public static void main(Str
Java 集合中关于Iterator 和ListIterator的详解
1.IteratorIterator的定义如下:public interface Iterator&amp;lt;E&amp;gt; {}Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口如下:forEachRemaining(Consumer&amp;lt;? super E&amp;gt; action):为每个剩余元素执行给定的操作,直到所有的元素...
关于Java集合迭代器
使用迭代器遍历集合 代码`import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class...
Java的ListIterator的privious()方法解说
privious()方法有两个作用: 1.返回迭代器指向的前一位置的元素,主要用来反向遍历。 2.改变迭代器的指向,使它指向前一位置。 在这里呢,只是应用了它的第二个作用,因为第一个作用很好理解,所以暂不做过多
关于dll逆向的问题
我手里拿到了一份dll,其中有几个功能的实现,我还是好奇于是乎拖ida里去分析看看。rn但是为什么会有些函数的内部又调用了一些其他函数,但是这些函数却只有jmp 跳转地址,而又没有实际的内部呢?rnrn这个是为什么的呢??rnrnrndll的壳我已经请人给脱了。。rn
请教一个ListIterator的问题
实现将lst2装入lst1内容的反向内容,它们都是ArrayList容器。我使用ListIterator来完成rn[code=java] rn List lst1 = new ArrayList(Arrays.asList(0,1,2,3,4,5,6,7,8,9));rn List lst2 = new ArrayList(lst1);rn rn ListIterator it1 = lst1.listIterator(); rn ListIterator it2 = lst2.listIterator(lst2.size());rn //这里如果改为ListIterator it2 = lst2.listIterator(lst2.size() - 1);rn //那么下面这句it2.previous();就不需要了,但是程序运行时会抛出IllegalStateException异常......rn it2.previous();rn while (it1.hasNext())rn rn Integer integer = (Integer) it1.next(); rn it2.set(integer);rn if(it2.hasPrevious())//如果没有这个限制,也会抛出IllegalStateException异常......rn //按理来说容器的长度都相等,一个迭代器指向源的最前面,另一个指向目标的最后,那么循环次数应该相等的啊!rn it2.previous();rn rn[/code]
STL与泛型编程<十>:迭代器适配器(Iterator Adapters)之逆向迭代器
此类迭代器可以使得算法能够以逆向(reverse mode)模式,安插模式(insert mode)进行工作,也可以流(streams)的模式搭配工作逆向迭代器reverse迭代器是一种适配器,重新定义递增运算和递减运算,使其行为正好倒置,所有标准容器都允许使用reverse迭代器来遍历元素,例子#include <iostream> #include <list> #include <itera
关于ListIterator的问题,大家帮我解答一下!
import java.util.ArrayList;rnimport java.util.List;rnimport java.util.ListIterator;rnrnpublic class test rnrn public static void main(String[] args) rnrn List list = new ArrayList();rn list.add("hello");rn list.add("java");rn ListIterator it = list.listIterator();rnrn it.add("@@@@@@@@@@");rn while (it.hasNext()) rn Object o = it.next();rn System.out.println(o);rn rnrn rnrn为什么@@@@@@@@@@不能输出来啊?rn还有it.set()方法一直报错!
Java里面迭代器的问题
想问下关于循环遍历的问题,如果我要遍历多重集合(简单来说就是一个A集合,里面包含了很多A1,A2,A3集合,然后A1集合里面就是字符串),我有哪些遍历方式?如果只用迭代器的话,我该怎么使用,想了半天,就是感觉只使用迭代器的话,难度好大?请问下你们是怎么遍历的?rn
Java迭代器contains的问题
功能:ArrayList去除集合中字符串的重复值(字符串的内容相同),思路:创建新集合方式。 第一种编译运行没问题,第二种写法出错,原因是不可以两次使用it.next()。 错误提示:Exception in thread "main" java.util.NoSuchElementException public static ArrayList noRepeat2(ArrayList...
JAVA 迭代器问题
已知迭代器索引,怎么得到指定索引位置的记录。
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview