-
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
-
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
-
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
package zhengze; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class Demo { public static void main(String[] args) { ArrayList<String> a1 = new ArrayList<>(); //建立一个集合 //添加元素 a1.add("01"); a1.add("02"); a1.add("03"); //这些是元素的引用放到了集合当中,用集合填加这没什么问题 //当我们来个a1.iterator()的时候,我们就把元素的引用防到了迭代器里面了. /* 现在能操作元素的方式有2种了,要么用集合的方式操作,要么用迭代器的方式操作 这2种操作方式操作的是同一种元素, it.next();迭代器正在操作取出操作的过程中.你又用到了集合al.add操作方法操作 就行成了同时病发,出现安全隐患. 不同做的是: 对同一组元素进行多种同时操作. */ //在迭代器过程中,准备添加或者删除元素 Iterator it = a1.iterator(); while (it.hasNext()) { Object obj=it.next(); //我取到02,obj指向02, if(obj.equals("02")) //判断条件满足 //al.add(""02""); it.remove(); //这句话的意思是 遍历到不要让努力白废的时候,就把这句话的引用从集合中干掉. 但这个元素的引用还在内存当中,元素还在被obj使用 sop("obj="+obj); //打印元素都还在. } sop(a1); //集合中就少了02 //建立一个集合 ArrayList<String> a2 = new ArrayList<>(); //填加元素 a2.add("努力01"); a2.add("努力02"); a2.add("努力03"); sop(a2); //演示列表迭代器 ListIterator<String> li =a2.listIterator(); while (li.hasNext()) //如果仍有元素可以迭代 { Object obj = li.next(); //返回迭代的下一个元素 if(obj.equals("努力02"))//指定的对象与列表是否相等. li.set("努力08");//用指定元素替换列表中指定位置元素 } sop(a2); } public static void sop(Object obj) { System.out.println(obj); } } /* 迭代器 只有3钟方法: 方法摘要 boolean hasNext() 如果仍有元素可以迭代,则返回 true。 E next() 返回迭代的下一个元素。 void remove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 只有 3种方法没有添加怎么办呢. java.util 接口 Iterator<E> 这个哥们提供了小弟 所有已知子接口: ListIterator<E>, (列表迭代器) 小弟继承了Iterator public interface ListIterator<E>extends Iterator<E> 列表迭代器继承着迭代器,,,而列表迭代器因为他里面有指针,角标. 它的方法 要比他爹的方法多的多. */