ref: http://blog.csdn.net/fengzhe0411/article/details/7187905
迭代器模式我们在jdbc,和容器中经常用到。每个容器要想遍历的时候,我们会调用
xxx.iterator();返回迭代器。
首先我们先看看迭代器接口
1 Method Summary 2 boolean hasNext() 3 Returns true if the iteration has more elements. 4 E next() 5 Returns the next element in the iteration. 6 void remove() 7 Removes from the underlying collection the last element returned by the iterator (optio
3个方法,hashnext 还有下一个元素吗? next:获得下一个元素的对象
迭代器屏蔽了各种实现细节,对于hashmap,LinkedList都可以用迭代器访问,而不用了解内部实现的细节。
下面使用Iterator接口,和Collection接口实现一个LinkedList集合。
1 import java.util.Collection; 2 import java.util.Iterator; 3 4 //链表迭代器的实现 5 class Node 6 { 7 Object n; 8 Node next; 9 public Node(Object n) 10 { 11 this.n=n; 12 13 } 14 15 } 16 public class LinkList implements Collection{ 17 Node head=null; 18 Node tail=null; 19 int size=0; 20 21 22 /** 23 * @param args 24 */ 25 public static void main(String[] args) { 26 // TODO Auto-generated method stub 27 LinkList l=new LinkList(); 28 l.add(new Node("zhang")); 29 l.add(new Node("xiao")); 30 l.add(new Node("er")); 31 l.add(new Node("shi")); 32 Iterator iter=l.iterator(); 33 while(iter.hasNext()) 34 { 35 System.out.println(iter.next()); 36 37 } 38 39 } 40 41 @Override 42 public int size() { 43 // TODO Auto-generated method stub 44 return size; 45 } 46 47 @Override 48 public boolean isEmpty() { 49 if(head==null) return true; 50 return false; 51 } 52 53 @Override 54 public boolean contains(Object o) { 55 // TODO Auto-generated method stub 56 Node p=head; 57 while(p!=null) 58 { 59 if(p.n==o) return true; 60 p=p.next; 61 } 62 return false; 63 } 64 65 @Override 66 public Iterator iterator() { 67 // TODO Auto-generated method stub 68 return new LinkListIterator(); 69 } 70 71 @Override 72 public Object[] toArray() { 73 // TODO Auto-generated method stub 74 return null; 75 } 76 77 @Override 78 public Object[] toArray(Object[] a) { 79 // TODO Auto-generated method stub 80 return null; 81 } 82 83 @Override 84 public boolean add(Object e) { 85 // TODO Auto-generated method stub 86 if(head==null) 87 { 88 head=(Node) e; 89 tail=head; 90 } 91 else 92 { 93 tail.next=(Node) e; 94 tail=tail.next; 95 96 } 97 return true; 98 } 99 100 @Override 101 public boolean remove(Object o) { 102 // TODO Auto-generated method stub 103 return false; 104 } 105 106 @Override 107 public boolean containsAll(Collection c) { 108 // TODO Auto-generated method stub 109 return false; 110 } 111 112 @Override 113 public boolean addAll(Collection c) { 114 // TODO Auto-generated method stub 115 return false; 116 } 117 118 @Override 119 public boolean removeAll(Collection c) { 120 // TODO Auto-generated method stub 121 return false; 122 } 123 124 @Override 125 public boolean retainAll(Collection c) { 126 // TODO Auto-generated method stub 127 return false; 128 } 129 130 @Override 131 public void clear() { 132 // TODO Auto-generated method stub 133 134 } 135 private class LinkListIterator implements Iterator 136 { 137 private Node current=head; 138 139 @Override 140 public boolean hasNext() { 141 // TODO Auto-generated method stub 142 if(current==null) return false; 143 return true; 144 } 145 146 @Override 147 public Object next() { 148 Object o=current.n; 149 current=current.next; 150 return o; 151 } 152 153 @Override 154 public void remove() { 155 // TODO Auto-generated method stub 156 157 } 158 159 160 } 161 162 }