概述:
Iterator对象(代理模式)称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素
所有实现了collection接口的集合类都有一个iterator()方法,用以返回一个实现了iterator接口的对象。
iterator仅用于遍历集合,iterator本身并不提供承装对象的能力。如果需要创建iterator对象,则必须有一个被迭代的集合。
在调用it.next()方法之前必须要调用it.hasNext()进行检测如不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。
List额外提供了一个listiterator()方法,该方法返接口继承了iteratior回一个listiterator对象,listiterator接口继承了iterator接口,提供了专门操作list的方法
iterator和listiterator区别:
一、都有hasnext()和next都是顺序向后,但listiterator可以实现逆向(顺序向前)遍历用hasprevious()方法和previous方法。
二、listiterator可以定位当前的索引位置,nextIndex和previousIndex可以实现,iterator没有
三、listiterator有add方法,可以向list中插入对象,iterator不能。
四、都可以删除对象,但listiterator可以实现set方法修改。iterator仅能遍历不能修改(只读)
因为listiterator的这些功能,可以实现对LinkedList等list数据结构的操作。
package com.xatu.集合;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
class Student {
String name;
int age;
}
public class LIstTest {
@Test
public void testArrayList() {
List l = new ArrayList<>();
l.add(new Integer(100));
System.out.println("添加200结果1" + l.add(200));
System.out.println("添加200结果2" + l.add(200));
System.out.println("添加一个对象" + l.add(new Student()));
l.add("aaa");
l.add("aaa");
l.add(0, new Student());
l.set(1, 2000);// 替换
System.out.println("大小" + l.size());
System.out.println(l.indexOf("aaa"));// 5
System.out.println(l.indexOf("aaa"));// 5
List sl = l.subList(3, 6);
System.out.println("sl" + sl);//
for (Object object : l) {
System.out.println(object);
}
System.out.println("-------------");
// 正常循环打印
for (int i = 0; i < l.size(); i++) {
System.out.println(l.get(i));
}System.out.println("迭代器");
Iterator it = l.iterator();
while (it.hasNext()) {
Object object = it.next();
System.out.println(object);
}
}