Java 迭代器和Listiterator之间的区别?
我们可以使用Java 迭代器和Listiterator之间的区别?,java,list,iterator,set,listiterator,Java,List,Iterator,Set,Listiterator,我们可以使用迭代器遍历集合或列表或映射。但是列表迭代器只能用于遍历列表,不能遍历集。为什么? 我知道主要的区别在于,使用iterator,我们只能向一个方向移动,而使用ListIterator,我们可以向两个方向移动。还有其他区别吗?和列表迭代器相比迭代器的任何优点?这些区别在Javadoc中列出,以供参考 你可以 向后迭代 在任意点获取迭代器 在任意点添加新值 在该点设置一个新值 有两个区别: 我们可以使用迭代器遍历集合和列表,还可以映射对象的类型。而ListIterator可用于遍历列表类
迭代器
遍历集合
或列表
或映射
。但是列表迭代器
只能用于遍历列表
,不能遍历集
。为什么?
我知道主要的区别在于,使用iterator,我们只能向一个方向移动,而使用
ListIterator,我们可以向两个方向移动。还有其他区别吗?和列表迭代器
相比迭代器
的任何优点?这些区别在Javadoc中列出,以供参考
你可以
- 向后迭代
- 在任意点获取迭代器
- 在任意点添加新值
- 在该点设置一个新值
有两个区别:
我们可以使用迭代器遍历集合和列表,还可以映射对象的类型。而ListIterator可用于遍历列表类型的对象,但不能遍历集合类型的对象
也就是说,我们可以使用Set和List获得迭代器对象,请参见此处:
通过使用迭代器,我们只能在前进方向上从集合对象检索元素
迭代器中的方法:
hasNext()
next()
remove()
但我们仅从列表接口获取ListIterator对象,请参见此处:
其中,作为ListIterator,您可以在任意方向(向前和向后)进行遍历。因此,除了迭代器的方法外,它还有另外两种方法,如hasPrevious()
和previous()
。此外,我们还可以获取下一个或上一个元素的索引(分别使用nextIndex()
和previousIndex()
)
ListIterator中的方法:
hasNext()
下一个()
前()
hasPrevious()
删除()
nextIndex()
以前的索引()
i、 例如,我们无法从Set接口获取ListIterator对象
参考资料:-
迭代器是ListIterator的超类
以下是它们之间的区别:
使用iterator
只能向前移动,但使用ListIterator
也可以在读取元素时向后移动单词
使用列表迭代器
可以在遍历时在任意点获取索引,而使用迭代器
s则不可能
使用迭代器
可以只检查下一个元素是否可用,但在列表迭代器
中可以检查上一个和下一个元素
使用listiterator
可以在遍历时随时添加新元素。使用迭代器
不可能
使用列表迭代器
可以在遍历时修改元素,这在迭代器
中是不可能的
迭代器外观:
ListIterator listiterator = List.listIterator();
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //optional-->use only once with next(),
dont use it when u use for:each
}
公共接口迭代器{
布尔hasNext();
E next();
void remove();//可选-->仅与next()一起使用一次,
使用时不要使用它:每个
}
ListIterator外观:
ListIterator listiterator = List.listIterator();
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //optional-->use only once with next(),
dont use it when u use for:each
}
公共接口ListIterator扩展了迭代器{
布尔hasNext();
E next();
布尔hasPrevious();
E先前的();
int-nextIndex();
int previousIndex();
void remove();//可选
无效集(E);//可选
void add(E);//可选
}
下面是迭代器和listIterator之间的区别
迭代器:
boolean hasNext();
E next();
无效删除();
列表迭代器:
boolean hasNext();
E next();
布尔hasPrevious();
E先前的();
int-nextIndex();
int previousIndex();
无效删除();
无效集(E);
无效添加(E);
除了Peters的答案之外,我建议您阅读《用java思考迭代器》中的一章,其中有所有很好的例子,您不能使用集来实现这一点的原因很简单:没有“当前点”:元素没有索引,也没有添加“before”或“after”元素的有效方法另一个。@Peter Lawrey在任意点获取索引-是关于方法previousIndex()和nextIndex()?@gstackoverflow check java.util.List#listIterator(int)@kilonet,而不是在任意点获取索引,如果它的措辞类似于“在任意点获取迭代器”为了避免混淆?这看起来像是从中剪切和粘贴的。你必须始终承认原作者。
public interface ListIterator<E> extends Iterator<E> {
boolean hasNext();
E next();
boolean hasPrevious();
E previous();
int nextIndex();
int previousIndex();
void remove(); //optional
void set(E e); //optional
void add(E e); //optional
}