barriers / 阅读 / 详情

JAVA中Iterator的具体作用?

2023-07-19 20:14:49
共8条回复
蓓蓓

迭代器模式(Iterator pattern)

一、 引言

迭代这个名词对于熟悉Java的人来说绝对不陌生。我们常常使用JDK提供的迭代接口进行java collection的遍历:

Iterator it = list.iterator();

while(it.hasNext()){

//using “it.next();”do some businesss logic

}

而这就是关于迭代器模式应用很好的例子。

二、 定义与结构

迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。

从定义可见,迭代器模式是为容器而生。很明显,对容器对象的访问必然涉及到遍历算法。你可以一股脑的将遍历方法塞到容器对象中去;或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧。这两种情况好像都能够解决问题。

然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。

而迭代器模式的出现,很好的解决了上面两种情况的弊端。先来看下迭代器模式的真面目吧。

迭代器模式由以下角色组成:

1) 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。

2) 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。

3) 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。

4) 具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。

迭代器模式的类图如下:

从结构上可以看出,迭代器模式在客户与容器之间加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器内部细节的暴露,而且也使得设计符号“单一职责原则”。

注意,在迭代器模式中,具体迭代器角色和具体容器角色是耦合在一起的——遍历算法是与容器的内部细节紧密相关的。为了使客户程序从与具体迭代器角色耦合的困境中脱离出来,避免具体迭代器角色的更换给客户程序带来的修改,迭代器模式抽象了具体迭代器角色,使得客户程序更具一般性和重用性。这被称为多态迭代。

三、 举例

由于迭代器模式本身的规定比较松散,所以具体实现也就五花八门。我们在此仅举一例,根本不能将实现方式一一呈现。因此在举例前,我们先来列举下迭代器模式的实现方式。

1.迭代器角色定义了遍历的接口,但是没有规定由谁来控制迭代。在Java collection的应用中,是由客户程序来控制遍历的进程,被称为外部迭代器;还有一种实现方式便是由迭代器自身来控制迭代,被称为内部迭代器。外部迭代器要比内部迭代器灵活、强大,而且内部迭代器在java语言环境中,可用性很弱。

2.在迭代器模式中没有规定谁来实现遍历算法。好像理所当然的要在迭代器角色中实现。因为既便于一个容器上使用不同的遍历算法,也便于将一种遍历算法应用于不同的容器。但是这样就破坏掉了容器的封装——容器角色就要公开自己的私有属性,在java中便意味着向其他类公开了自己的私有属性。

那我们把它放到容器角色里来实现好了。这样迭代器角色就被架空为仅仅存放一个遍历当前位置的功能。但是遍历算法便和特定的容器紧紧绑在一起了。

而在Java Collection的应用中,提供的具体迭代器角色是定义在容器角色中的内部类。这样便保护了容器的封装。但是同时容器也提供了遍历算法接口,你可以扩展自己的迭代器。

好了,我们来看下Java Collection中的迭代器是怎么实现的吧。

//迭代器角色,仅仅定义了遍历接口

public interface Iterator {

boolean hasNext();

Object next();

void remove();

}

//容器角色,这里以List为例。它也仅仅是一个接口,就不罗列出来了

//具体容器角色,便是实现了List接口的ArrayList等类。为了突出重点这里指罗列和迭代器相关的内容

//具体迭代器角色,它是以内部类的形式出来的。AbstractList是为了将各个具体容器角色的公共部分提取出来而存在的。

public abstract class AbstractList extends AbstractCollection implements List {

……

//这个便是负责创建具体迭代器角色的工厂方法

public Iterator iterator() {

return new Itr();

}

//作为内部类的具体迭代器角色

private class Itr implements Iterator {

int cursor = 0;

int lastRet = -1;

int expectedModCount = modCount;

public boolean hasNext() {

return cursor != size();

}

public Object next() {

checkForComodification();

try {

Object next = get(cursor);

lastRet = cursor++;

return next;

} catch(IndexOutOfBoundsException e) {

checkForComodification();

throw new NoSuchElementException();

}

}

public void remove() {

if (lastRet == -1)

throw new IllegalStateException();

checkForComodification();

try {

AbstractList.this.remove(lastRet);

if (lastRet < cursor)

cursor--;

lastRet = -1;

expectedModCount = modCount;

} catch(IndexOutOfBoundsException e) {

throw new ConcurrentModificationException();

}

}

final void checkForComodification() {

if (modCount != expectedModCount)

throw new ConcurrentModificationException();

}

}

至于迭代器模式的使用。正如引言中所列那样,客户程序要先得到具体容器角色,然后再通过具体容器角色得到具体迭代器角色。这样便可以使用具体迭代器角色来遍历容器了……

四、 实现自己的迭代器

在实现自己的迭代器的时候,一般要操作的容器有支持的接口才可以。而且我们还要注意以下问题:

在迭代器遍历的过程中,通过该迭代器进行容器元素的增减操作是否安全呢?

在容器中存在复合对象的情况,迭代器怎样才能支持深层遍历和多种遍历呢?

以上两个问题对于不同结构的容器角色,各不相同,值得考虑。

五、 适用情况

由上面的讲述,我们可以看出迭代器模式给容器的应用带来以下好处:

1) 支持以不同的方式遍历一个容器角色。根据实现方式的不同,效果上会有差别。

2) 简化了容器的接口。但是在java Collection中为了提高可扩展性,容器还是提供了遍历的接口。

3) 对同一个容器对象,可以同时进行多个遍历。因为遍历状态是保存在每一个迭代器对象中的。

由此也能得出迭代器模式的适用范围:

1) 访问一个容器对象的内容而无需暴露它的内部表示。

2) 支持对容器对象的多种遍历。

3) 为遍历不同的容器结构提供一个统一的接口(多态迭代)。

cloud123

你说的没有错,iterator有hasNext()方法,返回是否还有没有访问的元素,next()则是返回下一个元素,这样对于需要遍历的地方,你就不需要知道元素的个数了.

而且iterator支持泛型,如

ArrayList<String> list=new ArrayList<String> ();

list.add("I");

list.add("Love");

list.add("You");

//注意对list修改完后,再取迭代器。不然会引发ConcurrentModificationException

//迭代器

Iterator<String> iter=list.iterator();

while(iter.hasNext())

System.out.println(iter.next()); //next()取得直接是String类型,不需要类型转换了。(JDK1.5以上)

//ArrayList实现了Iterable接口,因此可以用for-each循环遍历(JDK1.5以上)

for(String str:list)

System.out.println(str);

-------

你把它理解成数据结构中链表的那个next,就是一个线索。把容器中的各个元素穿起来。

你自己的类型也可以实现iterable接口,就可以迭代了。也可以用

foreach循环遍历了。

coco

就是方便对集合类中的元素进行迭代的 恩 基本就是这个意思 取出集合中的元素 进行遍历

举个例子吧

import java.util.ArrayList;

import java.util.Iterator;

public class Test {

public static void main(String argv[]) {

ArrayList list = new ArrayList();

list.add(1);

list.add(3);

list.add(5 );

Iterator it = list.iterator();

while(it.hasNext()){

int s = (Integer)it.next();

System.out.println(s);

}

}

}

nicehost

迭代其实可以理解为遍历!就是一个标准化遍历各类容器里面的所有对象的方法类,它是一个很典型的设计模式。

黑桃云

统一了集合的添加,和输出

LuckySXyd

的所发生的

康康map

也叫迭代器,能更好的去访问集合里面的内容~

真可

有时间你去看看Iterator接口的源代码是怎么写的。

相关推荐

Iterator的使用

Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素。 Iterator iter = list.iterator(); // 注意iterator,首字母小写 iterator是为了实现对Java容器(collection)进行遍历功能的一个接口。 在iterator实现了Iterator接口后,相当于把一个Collection容器的所有对象,做成一个线性表(List),而iterator本身是一个指针,开始时位于第一个元素之前。 判断 iterator 内是否存在下1个元素,如果存在,返回true,否则返回false。(注意,这时上面的那个指针位置不变) 返回 iterator 内下1个元素,同时上面的指针向后移动一位。 故,如果不断地循环执行next()方法,就可以遍历容器内所有的元素了。 删除 iterator 内指针的前1个元素,前提是至少执行过1次next(); (这个方法不建议使用,建议使用容器本身的romove 方法) 遍历1个ArrayList 和Linklist是十分容易的,遍历1个Tree容器也不难,但是实现机制是完全不同,而遍历1个Set容器就无从下手了。 所以Java设计了Iterator 这个接口,分别让各种容器自己去重写里面的hasNext()和next()方法。 不用关心各种容器的遍历机制,只要使用Iterator,会让人觉得各种容器的遍历方法都是一样的,这就是Java接口的重要意义。 在Java的各种容器中,例如ArrayList,HashSet等,并没有直接实现Iterator这个接口。所以ArrayList,HashSet容器内是没有hasnext(),next()的方法的,而是iterator() 这个方法,返回1个实现了Iterator接口的iterator对象。
2023-07-19 12:57:241

用迭代器iterator遍历list中第一条数据和最后一条数据 并判断

Iterator iterator = list.iterator();Object first = null;Object last = null;int count = 0;while(iterator.hasNext()) {count++;Object temp = iterator.next();if(count==1) {first = temp;}else {if(!iterator.hasNext()) {//最后一个元素last = temp;}}}之后对first、last处理,之后的代码用户可根据自己的需求进行处理。扩展资料:迭代器是一种模式、详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部。Iterable:实现这个接口的集合对象支持迭代,是可以迭代的。实现了这个可以配合foreach使用Iterator:迭代器,提供迭代机制的对象,具体如何迭代是这个Iterator接口规范的。Iterator接口包含三个方法:hasNext,next,remove。参考资料来源:百度百科-迭代器
2023-07-19 12:57:361

什么是迭代器 iterator

迭代器(Iterator)迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。Java中的Iterator功能比较简单,并且只能单向移动:(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。(2) 使用next()获得序列中的下一个元素。(3) 使用hasNext()检查序列中是否还有元素。(4) 使用remove()将迭代器新返回的元素删除。Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
2023-07-19 12:58:062

iterator就有循环功能吗?

循环器(iterator)的功能循环器(迭代器)是对象的容器,包含有多个对象。通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器将依次返回一个对象。直到所有的对象遍历穷尽,循环器将举出StopIteration错误。在for i in iterator结构中,循环器每次返回的对象将赋予给i,直到循环结束。使用iter()内置函数,我们可以将诸如表、字典等容器变为循环器。比如for i in iter([2, 4, 5, 6]):print(i)>>> a=iter([2, 4, 5, 6])>>> while True: next(a)标准库中的itertools包提供了更加灵活的生成循环器的工具。这些工具的输入大都是已有的循环器。另一方面,这些工具完全可以自行使用Python实现,该包只是提供了一种比较标准、高效的实现方式。这也符合Python“只有且最好只有解决方案”的理念。# import the toolsfrom itertools import *无穷循环器count(5, 2) #从5开始的整数循环器,每次增加2,即5, 7, 9, 11, 13, 15 ...cycle("abc") #重复序列的元素,既a, b, c, a, b, c ...repeat(1.2) #重复1.2,构成无穷循环器,即1.2, 1.2, 1.2, ...repeat也可以有一个次数限制:repeat(10, 5) #重复10,共重复5次
2023-07-19 12:58:151

java中为什么要使用Iterator?Iterator的用途是什么?

Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。 x0dx0ax0dx0a 例如,如果没有使用Iterator,遍历一个数组的方法是使用索引: x0dx0ax0dx0afor(int i=0; i
2023-07-19 12:58:241

js迭代器iterator

iterator(迭代)一般很少直接使用, 但是却是很常用很重要的功能. 例如 : 对象的扩展运算符(...)内部其实是调用了 Iterator 接口。 在es6 中统一了遍历的接口 Iterator,Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环。 字符串也可以使用扩展运算符 rest运算符, 与扩展运算符是逆运算 扩展运算符:数组=>分割序列 rest运算符:分割序列=>数组 rest可以代替arguments变量 回到主题, 迭代 Symbol.iterator 为每一个对象定义了默认的迭代器。 当需要对一个对象进行迭代时(比如开始用于一个 for..of 循环中),它的 @@iterator 方法都会在不传参情况下被调用,返回的 迭代器 用于获取要迭代的值。 一些内置类型拥有默认的迭代器行为,其他类型(如 Object )则没有。下表中的内置类型拥有默认的 @@iterator 方法: 更多信息请参见 迭代协议 。 js中对象分为可迭代和不可迭代 如果是可迭代哪它就会有一个[Symbol.iterator] 函数 这个函数就是对象的迭代器函数,如用for of 如果遍历的对象没有这个迭代方法那么就会报错. for of 传入的是可迭代对象,但是如何吧一个不可迭代的对象变为可迭代的对象呢!很简单就是自己写一个[Symbol.iterator]函数。 你以为迭代就这么简单的结束了吗?现在再讲一个新东西 yield . yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者。它可以被认为是一个基于生成器的版本的return关键字。 . yield关键字实际返回一个IteratorResult(迭代器)对象,它有两个属性,value和done,分别代表返回值和是否完成。 . yield无法单独工作,需要配合generator(生成器)的其他函数,如next,懒汉式操作,展现强大的主动控制特性。 用 yield 自定义一个迭代器 function* () {} 这种函数名字叫 generator函数, 生成器函数, 下一篇再重点讲这个哈.
2023-07-19 12:58:321

什么是迭代器(Iterator)?

【答案】:Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。
2023-07-19 12:58:401

c++ iterator 是什么意思

迭代器list<int> lst;for(list<int>::iterator i = lst.begin(); i != lst.end(); i++) printf("%d", *i);iterator本质就是一个指针,和下面类似char s[] = "hello";for(char* p = s; *p != ""; p++) printf("%c", *p);
2023-07-19 12:59:193

C++中iterator是什么类型和引用,指针

迭代器,可用于遍历STL set,map,vector等
2023-07-19 12:59:272

iterator迭代器有哪些常用方法

Java中的Iterator功能比较简单,并且只能单向移动:(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。2(2) 使用next()获得序列中的下一个元素。3(3) 使用hasNext()检查序列中是否还有元素。4(4) 使用remove()将迭代器新返回的元素删除。
2023-07-19 12:59:461

Iterator和Iterable的区别

java提供了很多集合类,而迭代器模式就是提供一种方法,顺序访问聚集的对象。而又不暴露该集合的内部表示。java中使用迭代器模式实现Iterator接口,用于对集合类的访问(遍历),新增,删除等操作。而Iterator接口只是java提供的一种抽象迭代器。对于具体迭代器,在不同集合类中实现自定义的具体迭代器;这样避免暴露了各个集合类中内部设计的结构和操作。 源码:ArrayList中的具体迭代器Itr 而Iterable的作用就是获取一个新的迭代器,每次获取的都是cursor重新开始的迭代器。而Iterable接口的iterator()方法的作用就是每次专门创建一个新的迭代器。 源码:ArrayList实现的Iterable接口 区别就是Iterable接口是专门创建新的迭代器的,Iterator接口是一个专门设计迭代器的。
2023-07-19 12:59:531

请问java中的Iterator和Iterable有些什么区别啊?

Iterator 迭代器Iterable 可迭代。迭代器可以迭代,可以迭代的是迭代器。可迭代类中封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器了。
2023-07-19 13:00:034

java iterator方法

迭代器(Iterator)  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。  Java中的Iterator功能比较简单,并且只能单向移动:  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。  (2) 使用next()获得序列中的下一个元素。  (3) 使用hasNext()检查序列中是否还有元素。  (4) 使用remove()将迭代器新返回的元素删除。  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。迭代器应用: list l = new ArrayList(); l.add("aa"); l.add("bb"); l.add("cc"); for (Iterator iter = l.iterator(); iter.hasNext();) { String str = (String)iter.next(); System.out.println(str); } /*迭代器用于while循环 Iterator iter = l.iterator(); while(iter.hasNext()){ String str = (String) iter.next(); System.out.println(str); } */
2023-07-19 13:00:135

Iterator为什么不能对容器的进行添加或修改

定义结构然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。而迭代器模式的出现,很好的解决了上面两种情况的弊端。先来看下迭代器模式的真面目吧。迭代器模式由以下角色组成:1) 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。2) 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。3) 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。4) 具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色与该容器的结构相关。迭代器模式的类图如下:从结构上可以看出,迭代器模式在客户与容器之间加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器内部细节的暴露,而且也使得设计符合“单一职责原则”。注意,在迭代器模式中,具体迭代器角色和具体容器角色是耦合在一起的——遍历算法是与容器的内部细节紧密相关的。为了使客户程序从与具体迭代器角色耦合的困境中脱离出来,避免具体迭代器角色的更换给客户程序带来的修改,迭代器模式抽象了具体迭代器角色,使得客户程序更具一般性和重用性。这被称为多态迭代。
2023-07-19 13:00:291

Iterator和ListIterator的区别是什么?

区别:1、Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。2、Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。3、ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
2023-07-19 13:00:372

Iterator 是类还是接口还是方法呢?

是一个接口,,,,AbstractList(list的父类)包含一个iterator()的方法,就是返回一个iterator的对象
2023-07-19 13:00:451

iterator接口和listiterator接口有何区别

Iterator和ListIterator主要区别在以下方面:1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。4. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。
2023-07-19 13:00:541

for(Iterator iter=cars.iterator();iter.hasNext();)d什么意思

哪句啊??
2023-07-19 13:01:022

求高手指点java中迭代器iterator和foreach的不同之处

foreach语句是由iterator实现的,正如你所说,他们的不同之处就在于remove()方法上。一般调用删除方法都是集合的方法,例如:Listlist=newArrayList();list.add(...);list.remove(...);但是,如果在循环的过程中调用集合的remove()方法,就会导致循环出错,例如:for(inti=0;i<list.size();i++){list.remove(...);}循环过程中list.size()的大小变化了,就导致了错误。所以,如果你想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。如果你想了解的更透彻,可以查看一下原码,看它是怎么实现的。因为foreach语句是由iterator语句实现的,所以如果你在循环中删除某个元素时,应该用iterator的remove()方法,可是这时你又没有iterator对象,怎么调用呢?所以,这种情况下,一般还是用iterator来循环访问,并筛选删除。说白了,foreach就是为了让用iterator循环访问的形式看着更好看,写起来更方便。但如有删除操作,当然还是用它原来的形式了。
2023-07-19 13:01:091

c++中迭代器是什么意思?

1、迭代器是一种对象,它能够用来遍历STL容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上象迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。2、迭代器提供一些基本操作符:*、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致。不同之处在于,迭代器是个所谓的smart pointers,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型别都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型别却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。3、例程:#include using namespace std;class _iterator{private:char* p;public:_iterator(char* str):p(str){}char*& operator++(){p+=1; //跟 p++同价;return p;}};int main(){char* p="This is C++ program";_iterator it(p);cout
2023-07-19 13:01:302

java 中 iterator 为什么翻译成迭代器呢

舍本逐末 知道就好宏观把握
2023-07-19 13:01:526

java里iterator怎么获取当前元素?

建议你remove掉然后重新add,因为元素改了hashcode也改了,这样在hashset内部的位置要重新计算,你要是直接改元素的内容元素在hashset内部的位置不会变,后面使用的时候就会出问题
2023-07-19 13:02:062

多次迭代Iterator

使用 Iterator 的子接口 ListIterator里面有个方法hasPreviousboolean hasPrevious()如果以反向遍历列表,列表迭代器有多个元素,则返回 true。(换句话说,如果 previous 返回一个元素而不是抛出异常,则返回 true)。 返回:如果以反向遍历列表,列表迭代器有多个元素,则返回 true。previousE previous()返回列表中的前一个元素。可以重复调用此方法来迭代列表,或混合调用 next 来前后移动(注意交替调用 next 和 previous 将重复返回相同的元素)。 返回:列表中的上一个元素。 抛出: NoSuchElementException - 如果没有可迭代的上一个元素。previousIndexint previousIndex()返回对 previous 的后续调用所返回元素的索引。(如果列表迭代器在列表的开始,则返回 -1)。 返回:对 previous 的后续调用所返回元素的索引,如果列表迭代器在列表的开始,则返回 -1。
2023-07-19 13:02:131

C++中iterator是什么类型和引用,指针

iterator顾名思义是迭代器的意思。他是一个可迭代的类型的迭代器。从使用的角度看,她是一个指向其元素的引用。比如对于int[]这样的,其就是一个指向数组元素的非空指针。对于std::vector这样的,就是指向一个std::vector::iterator定义的类型。所以,对于迭代器,可以使用operator->和operator*。
2023-07-19 13:02:281

Iterator和Iterator什么区别

<string>在这里是泛型,你上面那句不写tostring(),得到的也是string类型的数据。
2023-07-19 13:02:365

Java iterator和set有什么区别?

JAVA集合主要分为三种类型: Set(集)  List(列表)   Map(映射)iterator 就是迭代器,是遍历集合的一种方式! 具体请看:http://baike.baidu.com/view/1413849.htm?fr=aladdin  
2023-07-19 13:02:523

iterator/>怎样取得循环的索引

<s:iterator value="list" id="user" status="L"><s:property value="#L.index+1"/>、<s:property value="#user.name"/><br></s:iterator>#L.index,即为list的索引其中L是个IteratorStatus对象List<User>User对象含有name和password属性。当然你也可以写成:<s:iterator value="list" id="user" status="L"><s:property value="${L.index+1}"/>、<s:property value="${user.name}"/><br></s:iterator>
2023-07-19 13:02:591

Java中的迭代器Iterator是属于类还是对象,还是别的?

抽象类
2023-07-19 13:03:284

Java iterator 迭代器如何加入元素...可以加入不同类型的元素么?

链表的一些方法使用和迭代器的使用(把链表内的元素迭代出),你可以看下~ import java.util.*;public class test11 {static LinkedList list = new LinkedList();String[] arrays = {"1","2","3","4","5"};static Iterator it ;public static void main(String[] args) {test11 t = new test11();t.useLinkedList(list);t.useIterator(list,it);}//链表的使用public void useLinkedList(LinkedList list){for(int i = 0;i < 5;i++)list.add(arrays[i]);//把数组的元素都添加到链表System.out.println("操作前的长度:"+list.size());//打印出链表的长度System.out.println("此列表的头(第一个元素)为:"+list.peek());/*peek() 找到但不移除此列表的头(第一个元素)。*/System.out.println("查找后的长度:"+list.size());System.out.println("移除的元素为:"+list.poll()); /*poll() 找到并移除此列表的头(第一个元素)。*/System.out.println("移除后的长度:"+list.size());System.out.println("返回第一个元素:"+list.getFirst());//getFirst() 返回此列表的第一个元素。System.out.println("返回最后一个元素:"+list.getLast());//getLast() 返回此列表的最后一个元素。if(list.contains("4"))//boolean contains(Object o) 如果此列表包含指定元素,则返回 true。 System.out.println("存在此元素");elseSystem.out.println("不存在此元素");}//迭代器的使用public void useIterator(LinkedList list,Iterator it){it = list.iterator();//将链表的元素迭代出并打印while(it.hasNext())System.out.print(it.next()+" ");}}
2023-07-19 13:03:372

Java中的“Iterable”和“Iterator”这两个单词的正确读音是什么,详见问题内容。

我晕,到金山词霸上去查下就行了,像计算机语言这个东西,有的都差不多,你知道怎么用就行了嘛
2023-07-19 13:03:474

Java iterator()和next()原理用法

2023-07-19 13:03:574

iterator有一个子类,不仅可以对集合进行从前向后的遍历,还可以从后面向前遍历?

iterator 的子类ListIterator<E>可以从按任意方向遍历列表、向前往后遍历使用next() 返回列表中的下一个元素,从后往前使用previous() 返回列表中的前一个元素。
2023-07-19 13:04:311

JAVA iterator 迭代器模式的next() 的问题 求高手回答 谢谢! 真诚求学 在线等。

关于你的疑问,请参考我的学习笔记吧。hasNext、next方法:迭代器用于遍历集合元素。获取迭代器可以使用Collection定义的方法:Iterator iterator()迭代器Iterator 本身是一个接口,集合在重写Collection的iterator()方法时利用内部类提供了迭代器的实现。Iterator提供了统一的遍历集合元素的方式,其提供了用于遍历集合的两个方法:boolean hasNext()判断集合是否还有元素可以遍历。E next() 返回迭代的下一个元素。每一种集合的实现类都是各自的迭代器实现,不用关心具体迭代器的类型,只将他们当作迭代器用于遍历集合元素即可。应当遵循“问-取-删”模式,适用于while循环。Iterator<String>it = c1.iterator(); --- 问的过程,询问c1集合中是否还有元素while( it.hasNext() ){ String str = (String) it.next(); --- 取出来的是Object类型,所以需要转换类型} 注意:应建立在hasNext返回true的基础上执行next()方法迭代过程中,不能调用集合的相关方法来改变集合中的元素,不然会抛出异常。应使用迭代器自身提供的方法操作。迭代器的删除方法是在原集合中删除元素。在调用remove方法前必须通过迭代器的next()方法迭代过元素,那么删除的就是这个元素,并且不能连续接着调用remove。While( it.hasNext() ){String str = (String) it.next();if(“#”.equals ( str ) ){ //凡是相互比较,应当让字变量.equals(变量),可以避免遇到null空指针异常it.remove();}}
2023-07-19 13:04:411

关于c++中iterator进行遍历与普通的for循环进行遍历的疑问

你可以输出调试信息,或者写日志看看为什么不一样
2023-07-19 13:04:482

使用iterator时,判断是否存在下一个元素可以使用以下哪个方法

接口 Iterator 专门的迭代输出接口,将元素一个个进行判断,用hasNext() 判断是否有值,用next()方法把元素取出。 hasNext() 如果仍有元素可以迭代,则返回 true。 next() 返回迭代的下一个元素。 经验的总结是只要碰到了集合输出的操作,就一定.
2023-07-19 13:04:581

谁能帮我解释一下 Iterator it = al.iterator();到底什么意思,最好能仔细一点

这是计算机编程里面的吧,意思就是把al.iterator()这个命令赋值给 Iterator it,命令的意思应该是对其进行迭代,计算机方面我也不太懂。不属于翻译领域:)
2023-07-19 13:05:172

iterator 怎么读

是问他的发音呢还是在程序中的使用方法?
2023-07-19 13:05:273

java中为什么要使用Iterator,或者Iterator的用途是什么

可以用iterator();
2023-07-19 13:05:375

java中Iterator和Iterable的区别

java ITerable和Iterator的区别如下:1.Iterator是迭代器类,而Iterable是为了只要实现该接口就可以使用foreach,进行迭代.Iterable中封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器了。2.集合Collection、List、Set都是Iterable的实现类,所以他们及其他们的子类都可以使用foreach进行迭代。3.Iterator中和核心的方法next(),hasnext(),remove(),都是依赖当前位置,如果这些集合直接实现Iterator,则必须包括当前迭代位置的指针。当集合在方法间进行传递的时候,由于当前位置不可知,所以next()之后的值,也不可知。而当实现Iterable则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。
2023-07-19 13:05:561

用迭代器iterator遍历list中第一条数据和最后一条数据 并判断

list.get(0);list.get(list.size()-1);从来不建议用iterator来读List,除非是为了偷懒foreach,不然别用这个烂玩意。直接当数组用,多方便啊。
2023-07-19 13:06:043

Iterator it = list.iterator()什么意思?

也学习一下
2023-07-19 13:06:215

Iterator迭代无限循环了,求帮助

while(bank.getCustomers().hasNext())每次,都重新得到Customers
2023-07-19 13:06:352

iterator 能否遍历Map 集合

Map集合不能使用iterator遍历,但是可以用下面的方式遍历Map public static void main(String[] args) { Map map = new HashMap(){}; map.put(1, "A"); map.put("a", "B"); map.put("A", "C"); map.put(new Object(), "D"); Iterator iterator = map.keySet().iterator(); while (iterator.hasNext()) { System.out.println(map.get(iterator.next()).toString()); } }
2023-07-19 13:06:421

迭代是什么意思?

从项目的草稿版本开始,一直到最终版本结束,中途随着逐步完善而产生的各个版本称之为迭代。此举在于便于客户在项目周期中也能对最终产品心里有个数。
2023-07-19 13:06:522

不是迭代器接口(Iterator)所定义的方法是()

不是迭代器接口(Iterator)所定义的方法是() A.hasNext()B.next()C.remove()D.nextElement()正确答案:nextElement()
2023-07-19 13:06:591

java中for循环和iterator迭代的区别

for循环是语言中循环控制结构。而iterator则是用来遍历集合中的元素。本身是不能够循环遍历需要借助循环控制语句进行迭代元素。个人认为iterator封装了循环体遍历元素的细节,使得编程人员无需关心集合结构,以及访问元素的操作。例如:for(inti=0;i评论00加载更多
2023-07-19 13:07:216

初学java,keySet()方法和iterator()方法分别是什么作用?他们合起来keySet().iterator()又是什么作用?

keyset()是获取所有的key值,iterator()是迭代遍历,keySet().iterator()返回一个hm.keySet ()的迭代。
2023-07-19 13:07:391

splice函数对象 出现list iterator invalid

楼主是C++写的程序hoxolo123回答的是Java的,而且和splice函数一点关系没有
2023-07-19 13:07:462

Java中哪些类实现了Iterator接口??

看一下jdk文档。就知道了。
2023-07-19 13:07:566

C++ 中 ,iterator是容器类的内部类吗?

you got it
2023-07-19 13:08:126