danan 发表于 2015-06-16 17:20

Java Iterator模式 模仿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.javapublic interface Collection<E> {
    public void add(E e);
    public int size();
    public Iterator iterator();
}2.ArrayList.javapublic class ArrayList<E> implements Collection<E>{

    //先给定一个长度为10的数组
    Object [] objects = new Object;
   
    //冗余一个int指数,方便判定是组是否为满和返回集合大小
    int index = 0;

    @Override
    //1.动态添加元素
    public void add(E e) {
         
      //1.1先判断数组是否已满
      if(index == objects.length){
            Object [] newObjects = new Object;
            System.arraycopy(objects, 0, newObjects, 0, objects.length);
            objects = newObjects;   //数组是引用数据类型
      }
         
      //1.2为新添加的元素指定下标
      objects = 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++;
            return o;
      }

      @Override
      public boolean hasNext() {
            // 判断是否为最后一个元素
            
            if(currentIndex >= index){
                return false;
            }
            return true;
      }
         
    }
   
}3.LinkedList.java<span style="font-size: 16px;">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;
      }
         
    }
}
</span>4.Node.javapublic 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.javapublic interface Iterator {
    public Object next();
    public boolean hasNext();
}6.Dog.javapublic class Dog {
    private int id;

    public Dog(int id) {
      super();
      this.id = id;
    }
   
    @Override
    public String toString() {
      return "Dog"+id;
    }
}7.测试类CollectionTest.javapublic 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());
      }
    }

}运行结果
页: [1]
查看完整版本: Java Iterator模式 模仿Collectin ArrayList LinckedList