2019年1月25日-自定义实现迭代器功能

迭代器的内部有hashnext()(返回类型为布尔类型)方法去判断下一个对象是否存在,若存在则继续下一个对象,若不存在则结束循环。

简易迭代器原理:

package cn.liu.tree3;
/**
 * 简化迭代器原理
 * hasNext
 * next
 * @author Administrator
 *
 */

public class MyArrayList {
	private String[] elem= {"a","b","c","d","e","f","g"};
	private int size=elem.length;
	
	
	private int cursor=-1;
	/**
	 * 判断是否存在下一个元素
	 * @return
	 */
	private boolean hasNext() {
		return cursor+1<size;
	}
	/**
	 * 获取下一个元素
	 */
	private String next() {
		cursor++;//移动一次
		return elem[cursor];
	}
	/**
	 * 删除元素
	 */
	private void remove() {
		
	}
	
	public static void main(String[] args) {
		MyArrayList list =new MyArrayList();
		while(list.hasNext()) {
			System.out.println(list.next());
		}
		 
		list=new MyArrayList();
		while(list.hasNext()) {
			System.out.println(list.next());
		}
	}

}

加入接口提供方法:

package cn.liu.tree3;
/**
 * 简化迭代器原理 加入接口 提供方法
 * hasNext
 * next
 * @author Administrator
 *
 */

import java.util.Iterator;

public class MyArrayList2 {
	private String[] elem= {"a","b","c","d","e","f","g"};
	private int size=elem.length;
	
	private class MyIt implements Iterator<String>{
		private int cursor=-1;
		/**
		 * 判断是否存在下一个元素
		 * @return
		 */
		public boolean hasNext() {
			return cursor+1<size;
		}
		/**
		 * 获取下一个元素
		 */
	    public String next() {
			cursor++;//移动一次
			return elem[cursor];
		}
		/**
		 * 删除元素
		 */
		public void remove() {
			
		}
   }
	public Iterator<String> iterator(){
		return new MyIt();
	}
	public static void main(String[] args) {
		MyArrayList2 list =new MyArrayList2();
		Iterator<String> it=list.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	
		it=list.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}

}


完善版:

package cn.liu.tree3;

import java.util.Iterator;

public class MyArrayList3 implements java.lang.Iterable<String>{
	private String[] elem= {"a","b","c","d","e","f","g"};
	private int size=elem.length;
	
	/**
	 * 匿名内部类
	 * @return
	 */	
	public Iterator<String> iterator(){
		  return new Iterator<String>(){
				private int cursor=-1;
				/**
				 * 判断是否存在下一个元素
				 * @return
				 */
				public boolean hasNext() {
					return cursor+1<size;
				}
				/**
				 * 获取下一个元素
				 */
				public String next() {
					cursor++;//移动一次
					return elem[cursor];
				}
				/**
				 * 删除元素
				 */
				public void remove() {
					
				}
		  };
	}
	
		public static void main(String[] args) {
			MyArrayList3 list=new MyArrayList3();
			Iterator<String> it=list.iterator();
			while(it.hasNext()) {
				System.out.println(it.next());
				it.remove();//删除元素
			}
			
			it=list.iterator();
			while(it.hasNext()) {
				System.out.println(it.next());
			}
			System.out.println("增强for,必须实现java.lang.Iterable接口,重写iterator方法");
			for(String temp:list) {
				System.out.println(temp);
			}
		
	
		  }
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值