java迭代器Iterator

Java 迭代器Iterator

迭代器Iterator是一种设计模式,可以使序列类型的数据结构的遍历与被遍历的对象分离,我们无需关系该序列的底层结构是什么。只要拿到对象,就可以用迭代器对对象内部的元素进行遍历。如对集合ArrayList和HashSet迭代。

Iterable 实现这个接口的集合对象是可以进行迭代的。IIterable 有一个默认的方法forEach进行遍历操作。
Iterator 迭代器提供迭代的对象,具体如何迭代时这个接口规范的。

  • Iterator 接口包含三个方法:
  • 1.hasNext():如果仍有元素可以迭代,返回true
  • 2.next():返回迭代的下一个元素的值
  • 3.remove():将迭代器返回的元素删除,一般很少用到。

注意:Iterator类位于java.util 包中,使用时需要引入:import java.util.Iterator;
在任意可迭代的集合数据类型中都必须实现:
1.集合数据类型必须实现一个iterator()方法并返回一个Iterator对象
2.Iterator类必须包含两个方法:hasNext()和next()

如果让一个类可迭代,第一步就是在它的声明中加入implements Iterable,然后在类中添加一个方法iterator()并返回一个迭代器Iterator,如下面代码

import java.util.Iterator;
import java.util.NoSuchElementException;

public class ResizingArrayStack<Item> implements Iterable<Item> {
	....
	....
	....
	//在类中添加一个方法iterator()并返回一个迭代器Iterator<Item>
	public Iterator<Item> iterator(){
		return new ReverseArrayIterator();
	}

	private class ReverseArrayIterator implements Iterator<Item>{
		private int i;
		public ReverseArrayIterator(){
			i=n-1;
		}
		
		public boolean hasNext(){
			return i>=0;
		}
		
		public void remove(){
			throw new UnsupportedOperationException();
		}
		
		public Item next(){
			if(!hasNext()) throw new NoSuchElementException();
			return a[i--];
		}
	}
//迭代器实例
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;

public class RunoobTest {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        numbers.add(12);
        numbers.add(8);
        numbers.add(2);
        numbers.add(23);
        Iterator<Integer> it = numbers.iterator();
        while(it.hasNext()) {
            Integer i = it.next();
            if(i < 10) {  
                it.remove();  // 删除小于 10 的元素
            }
        }
        System.out.println(numbers);
    }
}

/*
*out:  [12, 23]
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值