集合的四种输出方式
一、iterator迭代输出(最为常用)
Collection接口自JDK1.5之后,开始继承了Iterable父接口,并可以通过iterator()方法来获取到iterator对象来进行迭代。主要用到的api有以下三个:
public boolean hasnext() -> 用于判断是否有下一个待迭代元素
public Iterator<E> next() -> 用于获取迭代对象
public void remove(); -> 用于删除该迭代对象
```public static void main(String[] args) {
List list =new ArrayList<>();
list.add("STR1");
list.add("STR2");
list.add("STR3");
//获取iterator对象
Iterator iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
```
输出的结果为
STR1
STR2
STR3
二、ListIterator 双向迭代输出
这种迭代的方式使用情况比较少,特别之处在于一般的迭代是单向的从前往后迭代,但是ListIterator还支持从后往前迭代。
同时,Collection接口中并没有定义ListIterator的获取方法,想要获取ListIterator对象,相关的定义方法是自JDK1.2开始有的
```
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* Created by moutory on 2020-07-05.
*/
public class IteratorTest {
public static void main(String[] args) {
List list =new ArrayList<>();
list.add("STR1");
list.add("STR2");
list.add("STR3");
//获取ListIterator对象
ListIterator listIterator = list.listIterator();
System.out.println("向后迭代输出");
while (listIterator.hasNext()){
System.out.println(listIterator.next());
}
System.out.println("向前迭代输出");
while ((listIterator.hasPrevious())){
System.out.println(listIterator.previous());
}
}
}
```
输出结果为:
向后迭代输出
STR1
STR2
STR3
向前迭代输出
STR3
STR2
STR1
注意:ListIterator并不是想象中的任意就可以往前迭代,而是要先调用next()方法,将指针拨到最后,才能通过previous()方法获取到前面的元素,否则直接使用previous获取到的对象为0;


三、Enumberation枚举迭代输出
Enumberation是在JKD1.0的时候就出现的输出接口,主要是为了Vetor集合类使用。
注:vetor集合类其实跟arrayList相似,不同点是Vector是线程安全的
主要的api:
public Enumeration<E> elements(); -> 获取enum对象
public boolean hasMoreElement() -> 和iterator相似,判断是否有下一个元素
public E nextElement(); ->获取下一个迭代元素

输出:
vector1
vector2
vector3
四、foreach输出(日常常用)

输出结果为:
str1
str2
str3
总结起来,对于集合元素的迭代输出使用,很多时候我们用到的多是第一种和最后一种(其中使用第一种可能会更加贴合方法设计的初衷),同时,使用第一种方法进行迭代的时候要注意,中间不要使用list的remove方法去移除元素,要使用iterator的remove,否则会报并发修改异常。
原因详见:https://blog.csdn.net/sukier_JE/article/details/79898892
其实就是modCount和expectedModCount的同步问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!