import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
* 需求:遍历集合中的元素,判断取出的是否是“abc”这个字符串,如果是就删除。
*/
public class Demo04 {
public static void main(String[] args) {
// 创建集合对象
Collection coll = new ArrayList();
// 添加元素
coll.add("abc");
coll.add("def");
coll.add("ghk");
// 获取迭代器对象
Iterator it = coll.iterator();
// 判断
while (it.hasNext()) {
Object obj = it.next();
if (obj.equals("abc")) {
// 迭代器自身的方法,不能使用集合的方法!
it.remove();
}
}
System.out.println(coll);
}
}
迭代器注意细节:
迭代器遍历结束,光标移至最后一个元素的后面,如果还需要遍历,就需要重新基于这个集合容器获取一个新迭代器。
在使用迭代器遍历集合容器的时候,不能使用集合自身的增删方法修改集合中的元素。可以使用迭代器自身的remove方法。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
* 集合中保存的元素会被提升为为Object
*/
public class Demo05 {
public static void main(String[] args) {
// 创建集合容器对象
Collection coll = new ArrayList();
coll.add("abc");// 添加String对象
coll.add(123);// 添加Integer对象
Iterator it = coll.iterator();
while (it.hasNext()) {
Object obj = it.next();
// 获取字符串的长度
if (obj == "abc") {
// 向下转型
String s = (String) obj;
System.out.println(s.length());
}
}
}
}
从集合中取出的所有元素,统一都是Object类型,如果想要调用对象自身的特有方法,这时必须使用向下转型。
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/*
* list接口特有的迭代器
*/
public class Demo06 {
public static void main(String[] args) {
// 创建list集合对象
List list = new ArrayList();
// 添加元素
list.add("abc");
list.add("bcd");
list.add("hjk");
System.out.println("使用ListIterator正向遍历集合");
// 使用List特有的迭代器进行遍历
ListIterator it = list.listIterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("使用ListIterator逆向遍历");
while (it.hasPrevious()) {
System.out.println(it.previous());
}
}
}
List接口中提供了ListIterator迭代器,它可以对List集合从前往后遍历,也可以从后往前遍历,同时ListIterator接口中还提供的对集合的增删改查的方法。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
* 演示List集合的所有遍历方式
*/
public class Demo08 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("abc");
list.add("jkl");
list.add("yui");
// 使用Iterator遍历
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("/");
// 使用ListIterator遍历
ListIterator it1 = list.listIterator();
while (it1.hasNext()) {
System.out.println(it1.next());
}
System.out.println("/");
// 使用普通for循环进行遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("/");
// 使用foreach进行遍历
for (Object obj : list) {
System.out.println(obj);
}
}
}