e2

滴滴侠,fai抖

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

自定义迭代器接口:

package iterator_mode;

/**
 * 自定义迭代器接口
 */
public interface MyIterator {
    
    /**
     * 将游标指向第一个元素
     */
    public void first();
    
    /**
     * 将游标指向下一个元素
     */
    public void next();
    
    /**
     * 判断是否存在下一个元素
     */
    public boolean hasNext();
    
    /**
     * 判断当前游标是否是第一个
     */
    public boolean isFirst();
    
    /**
     * 判断当前游标是否是最后一个
     */
    public boolean isLast();
    
    /**
     * 获取当前游标指向的对象
     */
    public Object getCurrentObject();
    
}

 

自定义聚合类:

package iterator_mode;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义聚合类(封装对集合的操作)
 */
public class ConcreteMyAggregate {

    
    /**
     * 定义: 集合容器
     */
    private List<Object> list = new ArrayList<Object>();


    /**
     * 容器中添加对象
     */
    public void addObject(Object obj) {
        this.list.add(obj);
    }

    
    /**
     * 容器中移除对象
     */
    public void removeObject(Object obj) {
        this.list.remove(obj);
    }

    
    /**
     * 获得容器对象
     */
    public List<Object> getList() {
        return list;
    }

    
    /**
     * 设置容器对象
     */
    public void setList(List<Object> list) {
        this.list = list;
    }
    
    
    /**
     * 创建迭代器对象
     */
    public MyIterator createIterator(){
        return new ConcreteIterator();
    }
    
    
    /**
     * 使用内部类定义迭代器,可以直接使用外部类的属性
     */
    private class ConcreteIterator implements MyIterator {
        
        
        /**
         * 定义游标,用于记录遍历时的位置
         */
        private int cursor;//默认为0.    //从后往前遍历: private int cursor = list.size() - 1;


        /**
         * 将游标指向第一个元素
         */
        @Override
        public void first() {
            cursor = 0;
        }

        
        /**
         * 将游标指向下一个元素
         */
        @Override
        public void next() {
            if (cursor < list.size()) {
                cursor++;//cursor--;
            }
        }

        
        /**
         * 判断是否存在下一个元素
         */
        @Override
        public boolean hasNext() {
            if (cursor < list.size()) {
                return true;
            }
            return false;
        }

        
        /**
         * 判断当前游标是否是第一个
         */
        @Override
        public boolean isFirst() {
            return cursor==0?true:false;
        }

        
        /**
         * 判断当前游标是否是最后一个
         */
        @Override
        public boolean isLast() {
            return cursor==(list.size()-1)?true:false;
        }

        
        /**
         * 获取当前游标指向的对象
         */
        @Override
        public Object getCurrentObject() {
            return list.get(cursor);
        }
        
    }
    
}

 

测试类:

package iterator_mode;

public class Client {
    
    public static void main(String[] args) {
        //创建一个集合封装类
        ConcreteMyAggregate cma = new ConcreteMyAggregate();
        
        //添加元素
        cma.addObject("aa");
        cma.addObject("bb");
        cma.addObject("cc");
        
        //获得迭代器
        MyIterator iter = cma.createIterator();
        
        //进行遍历
        while (iter.hasNext()) {
            System.out.println(iter.getCurrentObject());
            iter.next();
        }
        
    }

}

 

打印结果:

aa
bb
cc

 

 

谢谢声明出处!

转自: http://www.cnblogs.com/gscq073240/articles/7106597.html

 

posted on 2017-07-02 17:37  纯黑Se丶  阅读(161)  评论(0)    收藏  举报