设计模式二(迭代子模式 Iterator)

来源:互联网 发布:我们的大数据时代2017 编辑:程序博客网 时间:2024/05/16 00:41

迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。

这句话包含两层意思:一是聚集对象;二是迭代器遍历对象。


迭代主要在集合类中应用,在开发过程极少用到,主要作用是理解集合。


一:数组的迭代

1、定一个数据集合类。

package interator.arrayList;/** * 数组对象的集合 * */public class ArrayList<T>{private Object[] objs = new Object[10];private int index = 0;public void add(T obj) {if(index==objs.length){Object[] newObjs = new Object[index+10];System.arraycopy(objs, 0, newObjs, 0, newObjs.length);objs = newObjs;}objs[index] = obj;index++;}public T get(int i) {if(i>=0 && i<=this.index){return (T)objs[i];}else{return null;}}public T First() {return this.get(0);}public T Last() {return this.get(this.index-1);}public int length(){return this.index;}}
2、定一个cat.java类、Dog.java类

package interator.arrayList;public class Cat{private String name;private int old;public Cat(String name,int old){this.name = name;this.old = old;}@Overridepublic String toString(){return this.getClass().getName() + ",name:"+this.name+",old:"+this.old;}}


package interator.arrayList;public class Dog{private String name;private int old;public Dog(String name,int old){this.name = name;this.old = old;}@Overridepublic String toString(){return this.getClass().getName() + ",name:"+this.name+",old:"+this.old;}}

3、测试代码

package interator.arrayList;public class Main {public static void main(String arg[]){ArrayList<Cat> carArry = new ArrayList<>();carArry.add(new Cat("cat1",1));carArry.add(new Cat("cat2",2));carArry.add(new Cat("cat3",3));for (int i=0;i<carArry.length();i++) {String str = carArry.get(i).toString();System.out.println(str);}ArrayList<Dog> dogArry = new ArrayList<>();dogArry.add(new Dog("dog1",1));dogArry.add(new Dog("dog2",2));dogArry.add(new Dog("dog3",3));for (int i=0;i<carArry.length();i++) {String str = dogArry.get(i).toString();System.out.println(str);}}}


二:链表的迭代

1、定义节点:

package interator.arrayList;public class Node {private Node next;private Object obj;public Node(Node node,Object obj){super();this.next = node;this.obj = obj;}public Node getNext() {return next;}public void setNext(Node next) {this.next = next;}public Object getObj() {return obj;}public void setObj(Object obj) {this.obj = obj;}}

2、定义链表集合迭代器:

package interator.arrayList;public class LinkedList<T> {private Node head = null;private Node tail = null;private int size = 0;public void add(T obj){if(obj==null){return;}else{if(head==null){head = new Node(null,obj);tail = new Node(null,null);head.setNext(tail);}else{Node n = new Node(null,null);tail.setObj(obj);tail.setNext(n);tail = n;}this.size++;}}public int size(){return this.size;}public T getFirst(){return (T) this.head.getObj();}public T get(int i){if(i>=0 && i<=this.size-1){Node node = this.head;for(int ii=0;ii<this.size;ii++){if(ii==i){return (T) node.getObj();}else{node = node.getNext();}}}return null;}}
3、测试数据

package interator.arrayList;public class LinkedListMain {public static void main(String args[]){LinkedList<Cat> linkedList = new LinkedList<>();linkedList.add(new Cat("cat1",1));linkedList.add(new Cat("cat2",2));linkedList.add(new Cat("cat3",3));System.out.println(linkedList.getFirst());System.out.println(linkedList.size());System.out.println(linkedList.get(2));}}








0 0