Java-马士兵设计模式学习笔记-迭代器模式-模仿Collectin ArrayList LinckedList

Java Iterator模式 Java Iterator模式, 模仿Collectin ArrayList LinckedList

一、有如下几个类

1.接口Collection.java

2.接口Iterator.java

3.ArrayList.java

4.LinkedList.java

5.Node.java

关系如下:

Java-马士兵设计模式学习笔记-迭代器模式-模仿Collectin ArrayList LinckedList

代码如下:

1.接口Collection.java

public interface Collection<E> {

	public void add(E e);

	public int size();

	public Iterator iterator();

}

  

2.ArrayList.java

public class ArrayList<E> implements Collection<E>{



	//先给定一个长度为10的数组

	Object [] objects = new Object[10];

	

	//冗余一个int指数,方便判定是组是否为满和返回集合大小

	int index = 0;



	@Override

	//1.动态添加元素

	public void add(E e) {

		

		//1.1先判断数组是否已满

		if(index == objects.length){

			Object [] newObjects = new Object[objects.length*2];

			System.arraycopy(objects, 0, newObjects, 0, objects.length);

			objects = newObjects;	//数组是引用数据类型

		}

		

		//1.2为新添加的元素指定下标

		objects[index] = e;

		

		//1.3index自加1,以方便返回集合在大小

		index++;

	}



	//2.根据下标访问元素

	

	@Override

	//3.返回集合大小

	public int size() {

		return index;

	}



	@Override

	public Iterator iterator() {

		return new ArrayListIterator();

	}

	

	private class ArrayListIterator implements Iterator {



		private int currentIndex = 0;

		

		@Override

		public Object next() {

			// 返回最下一个元素

			Object o = objects[currentIndex];

			currentIndex++;

			return o;

		}



		@Override

		public boolean hasNext() {

			// 判断是否为最后一个元素

			

			if(currentIndex >= index){

				return false;

			}

			return true;

		}

		

	}

	

}

  

3.LinkedList.java

public class LinkedList<E> implements Collection<E> {



	private Node head;

	private Node tail;

	private int size;

	

	public void add(E e){

		Node n = new Node(e, null);

		if(head == null){

			head = n;

			tail = n;

			size++;

		} else {

			tail.setNext(n);

			tail = n;

			size++;

		}

	}

	

	public int size(){

		return size;

	}



	@Override

	public Iterator iterator() {

		return new LinkedListIterator();

	}

	

	private class LinkedListIterator implements Iterator {



		private Node currentNode = head;

		

		@Override

		public Object next() {

			Object o = currentNode.getData();

			currentNode = currentNode.getNext();

			return o;

		}



		@Override

		public boolean hasNext() {

			if(currentNode.getNext() == null){

				return false;

			}

			return true;

		}

		

	}

}

4.Node.java

public class Node {

	

	private Object data;

	private Node next;

	

	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;

	}

	

	

}

 

5.Iterator.java

public interface Iterator {

	public Object next();

	public boolean hasNext();

}

 

6.Dog.java

public class Dog {

	private int id;



	public Dog(int id) {

		super();

		this.id = id;

	}

	

	@Override

	public String toString() {

		return "Dog"+id;

	}

}

7.测试类CollectionTest.java

public class CollectionTest {



	@Test

	public void test() {

		Collection co = new LinkedList();

		for(int i = 0 ;i < 15 ;i++){

			co.add(new Dog(i));

		}

		System.out.println(co.size());

		

		Iterator it = co.iterator();

		while(it.hasNext()){

			System.out.println(it.next());

		}

	}



}

运行结果

Java-马士兵设计模式学习笔记-迭代器模式-模仿Collectin ArrayList LinckedList

 

你可能感兴趣的:(ArrayList)