(3)设计模式:Iterator

来源:互联网 发布:淘宝分享送红包在哪找 编辑:程序博客网 时间:2024/06/11 15:18

ArrayList和LinkedList的遍历方式不一样,如果像把这些集合的遍历方式统一起来,所以Iterator就产生了。


package com.bjsxt.dp.iterator;public interface Collection {void add(Object o);int size();Iterator iterator();}

package com.bjsxt.dp.iterator;import com.bjsxt.dp.iterator.Collection;public class ArrayList implements Collection {Object[] objects = new Object[10];int index = 0;public void add(Object o) {if(index == objects.length) {Object[] newObjects = new Object[objects.length * 2];System.arraycopy(objects, 0, newObjects, 0, objects.length);objects = newObjects;}objects[index] = o;index ++;}public int size() {return index;}public Iterator iterator() {return new ArrayListIterator();}private class ArrayListIterator implements Iterator {private int currentIndex = 0;@Overridepublic boolean hasNext() {if(currentIndex >= index) return false;else return true;}@Overridepublic Object next() {Object o = objects[currentIndex];currentIndex ++;return o;}}}


package com.bjsxt.dp.iterator;import com.bjsxt.dp.iterator.Collection;public class LinkedList implements Collection {Node head = null;Node tail = null;int size = 0;public void add(Object o) {Node n = new Node(o, null);if(head == null) {head = n;tail = n;}tail.setNext(n);tail = n;size ++;}public int size() {return size;}@Overridepublic Iterator iterator() {return null;}}


package com.bjsxt.dp.iterator;public interface Iterator {Object next();boolean hasNext();}


package com.bjsxt.dp.iterator;public class Node {public Node(Object data, Node next) {super();this.data = data;this.next = next;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}private Object data;private Node next;}


package com.bjsxt.dp.iterator;public class Cat {public Cat(int id) {super();this.id = id;}private int id;@Overridepublic String toString() {return "cat:" + id;}}


package com.bjsxt.dp.iterator;import com.bjsxt.dp.iterator.ArrayList;import com.bjsxt.dp.iterator.LinkedList;public class Test {public static void main(String[] args) {//ArrayList al = new ArrayList();//LinkedList al = new LinkedList();Collection c = new ArrayList();for(int i=0; i<15; i++) {c.add(new Cat(i));}System.out.println(c.size());Iterator it = c.iterator();while(it.hasNext()) {Object o = it.next();System.out.print(o + " ");}}}






0 0
原创粉丝点击