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

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

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


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


一:数组的迭代

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));
		
		
	}
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值