我们先来看一段代码
使用 Iterator 需要调入
import java.util.Iterator;
public static void main(String args[]) throws customException {
Collection<String> list = new ArrayList<String>();
list.add("你好");
list.add("可爱的");
list.add("小猫猫");
Iterator<String> item = list.iterator();
System.out.println(item.next());
System.out.println(item.next());
System.out.println(item.next());
}
运行结果如下
我们通过ArrayList实现了一个字符串元素的Collection集合
并向集合中添加了三条数据
然后通过 Iterator实现了集合的iterator方法
并利用得到的item调用了三次next
每次取到的值都不一样
这也是一个非常有趣的方法 你只需要 next 他不需要下标 只会从第一个执行 一直执行到最后一个
那么 就会有人想了
我要是多调用了 next 会重新回去取第一条 还是报异常呢?
那当然是报异常啦
那么就会有人想 外一我不知道集合的长度呢?
这不是有size方法吗
参考代码如下
public static void main(String args[]) throws customException {
Collection<String> list = new ArrayList<String>();
list.add("你好");
list.add("可爱的");
list.add("小猫猫");
Iterator<String> item = list.iterator();
for(int i = 0;i < list.size();i++){
System.out.println(item.next());
}
}
输出结果如下
确实迭代器中还有另一个方法
public static void main(String args[]) throws customException {
Collection<String> list = new ArrayList<String>();
list.add("你好");
list.add("可爱的");
list.add("小猫猫");
Iterator<String> item = list.iterator();
if(item.hasNext()){
System.out.println(item.next());
}
if(item.hasNext()){
System.out.println(item.next());
}
if(item.hasNext()){
System.out.println(item.next());
}
if(item.hasNext()){
System.out.println(item.next());
}
}
输出结果如下
这时我们就看到 我们命名调用了 四次 但只执行了三次
因为被hasNext函数拦截调了
hasNext的作用就是判断对象还能不能继续next
我们把之前的循环改一下
public static void main(String args[]) throws customException {
Collection<String> list = new ArrayList<String>();
list.add("你好");
list.add("可爱的");
list.add("小猫猫");
Iterator<String> item = list.iterator();
while (item.hasNext()){
System.out.println(item.next());
}
}
我们的循环停止条件就是item.hasNext()不再成立 表示对象next已经用完了
运行结果如下
没有任何问题
不过我还是觉得 直接ArrayList比较好用 因为可以直接通过get下标访问 就没这堆破事
public static void main(String args[]) throws customException {
ArrayList<String> list = new ArrayList<String>();
list.add("你好");
list.add("可爱的");
list.add("小猫猫");
for(int i = 0;i < list.size();i++){
System.out.println(list.get(i));
}
}