zoukankan      html  css  js  c++  java
  • 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

    关系如下:

    代码如下:

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

    运行结果

  • 相关阅读:
    TWaver中文社区 » 关于
    RedMon Redirection Port Monitor
    dust good
    HiSpider(Hitask) is a fast and high performance spider with high speed
    42qu.com 找到给你答案的人
    yet another 牛人
    Simple Map Reduce at home
    China (googlegroups) [CPyUG:78205] 基于Python的MapReduce算法的快速构建框架
    retools 0.1 : Python Package Index
    Bloomfilter 的应用场景 黄刚的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/shamgod/p/4580649.html
Copyright © 2011-2022 走看看