在Iterator的源码中提供了三个方法,而我们比较常用到的是前两个
public interface Iterator { boolean hasNext(); Object next(); void remove(); } 我们总是都事先知道集合的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来。同时每一种集合对应一种遍历方法,客户端代码无法复用。 在实际应用中如何需要将上面将两个集合进行整合是相当麻烦的。所以为了解决以上问题, Iterator 模式腾空出世,它总是用同一种逻辑来遍历集合。使得客户端自身不需要来维护集合的内部结构,所有的内部状态都由 Iterator 来维护。客户端从不直接和集合类打交道,它总是控制 Iterator,向它发送”向前”,”向后”,”取当前元素”的命令,就可以间接遍历整个集合 public class TestStack { public static void main(String[] args){ List<String> li=new ArrayList<String>(); li.add("1"); li.add("2"); li.add("3"); li.add("4"); System.out.println(li); //遍历输出,四种方式 //1.使用Iterator对象,迭代遍历 Iterator<String> it=li.iterator(); while(it.hasNext()){ System.out.println("迭代输出:"+it.next()); } //2.对集合进行foreach循环 for(String str:li){ System.out.println("foreach输出:"+str); System.out.println(li.get(1)+"==============="); } for(Iterator<String> is=li.iterator();is.hasNext();){ System.out.println("测试循环"+is.next()); } //3.对集合进行for循环,在for方法体内部实例化Iterator对象 int i=0; for(Iterator<String> iter=li.iterator();i<li.size();i++){ System.out.println("for循环输出:"+iter.next()); } //4.先将集合转换为数组,再利用数组的遍历输出 Object[] o=li.toArray(); for(Object object:o){ System.out.println("转换为数组输出:"+object); } } } 返回结果: [1, 2, 3, 4] 迭代输出:1 迭代输出:2 迭代输出:3 迭代输出:4 foreach输出:1 2=============== foreach输出:2 2=============== foreach输出:3 2=============== foreach输出:4 2=============== 测试循环1 测试循环2 测试循环3 测试循环4 for循环输出:1 for循环输出:2 for循环输出:3 for循环输出:4 转换为数组输出:1 转换为数组输出:2 转换为数组输出:3 转换为数组输出:4