迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。
这句话包含两层意思:一是聚集对象;二是迭代器遍历对象。
迭代主要在集合类中应用,在开发过程极少用到,主要作用是理解集合。
一:数组的迭代
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; } @Override public 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; } @Override public 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)); } }