• 设计模式之Iterator模式(2)


    这篇文章比较简单,作一个笔记。

    模拟Iterator.

    Iterator接口:

    package cn.asto.Interator;
    
    public interface Iterator {
    
        public boolean hasNext();
        public Object next();
    }

    ArrayList类:

    package cn.asto.Interator;
    
    public class ArrayList implements List{
        private int index = 0;
        private Object[] object = new Object[10];
        public void add(Object o ){
            if(index==object.length){
                Object[] newObject = new Object[object.length+10];
                System.arraycopy(object, 0, newObject, 0, object.length);
                newObject[index] = o;
                object = newObject;
            }
            object[index]=o;
            index++;
        }
        public int size(){
            return index;
        }
        @Override
        public Iterator iterator() {
            
            return new arrayIterator();
        }
        
        
        private class arrayIterator implements Iterator{
            private int currentIndex;
            @Override
            public boolean hasNext() {
                if(currentIndex==index)return false;
                return true;
            }
    
            @Override
            public Object next() {
                Object o = object[currentIndex];
                currentIndex++;
                return o;
            }
            
        }
    }

    Test:

    package cn.asto.Interator;
    
    public class Test {
    
        public static void main(String args[]){
            List a = new ArrayList();
            int i = 11;
            while(i-->0){
                a.add(new Object());
            }
            Iterator ite = a.iterator();
            while(ite.hasNext()){
                Object o = ite.next();
                System.out.println(o);
            }
            
        }
        
        
    }

    每一种集合提供一个实现Iterator的内部类,每次调用iterator返回一个内部的实现,用户不必关心具体的实现。用户只要知道hasNext()判断集合中是否还存在元素,next取得下一个元素。

    再次重提 用户不用去关心具体的实现。

    LinkedList:

    package cn.asto.Interator;
    
    public class LinkedList implements List{
    
        private Node head = null; //头节点
        private Node tail = null;//尾节点
        private int size = 0;
        @Override
        public void add(Object o){
            Node n = new Node(o,null);
            if(head==null){
                 head = n;
                 tail = n;
            }else{
                tail.setNext(n);
                tail = n;
            }
            size ++;
        }
        
        public int size(){
            return size;
        }
    
        @Override
        public Iterator iterator() {
            // TODO Auto-generated method stub
            return new linkedIterator();
        }
        private class linkedIterator implements Iterator{
            private Node currentNode;
            @Override
            public boolean hasNext() {
                if(currentNode == tail) return false;
                return true;
            }
    
            @Override
            public Object next() {
                if(currentNode==null){
                    currentNode = head;
                }else {
                    currentNode = currentNode.getNext();
                }
                return currentNode.getData();
    
            }
            
        }
    
    }

    Test:

    package cn.asto.Interator;
    
    public class Test {
    
        public static void main(String args[]){
            List a = new LinkedList();
            int i = 11;
            while(i-->0){
                a.add(new Object());
            }
            Iterator ite = a.iterator();
            while(ite.hasNext()){
                Object o = ite.next();
                System.out.println(o);
            }
            
        }
        
        
    }
  • 相关阅读:
    Oracle判断对象是否存在sql语句
    Reporting Services 4: Web Service
    C#的16位和32位MD5加密
    龙的传人Xml_javascript分页
    龙的传人——xml_javascript三级联动
    SAE学习笔记1
    java方法重载
    jquery easyui时间微调器
    django支持ajax的post方法
    easyui插件显示问题
  • 原文地址:https://www.cnblogs.com/think-in-java/p/4753011.html
Copyright © 2020-2023  润新知