JAVA迭代器

1.迭代器区别于普通数组、List等遍历方式,主要是因容器的内部结构不同,在不知道如何遍历一个容器内的元素时使用迭代器模式。

        优点:一种通用的不依赖索引的迭代取值方式。同一时刻在内存中只存在一个值,更节省内存

        缺点:不灵活,不能取指定的某一个值,只能往后不能往前。无法预测迭代器长度

2.java.util.Iterator

public interface Iterator<E>{
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
}

3.Iterable

此接口返回一个迭代器,Collection<E>、List<E>、Set<E>等实现了该接口.实现Iterable接口允许对象成为Foreach语句的目标。

public interface Iterable<T> {
    Iterator<T> iterator();
    
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }


}
Iterator<String> listIt = list.iterator();
         while(listIt.hasNext()){
            System.out.println(listIt.next());
            //只能通过迭代器remove,直接用list.remove会异常
            if(){
                listIt.remove();
            }
            
         }

//Map通过entrySet()方法获取Set,再获取Set的迭代器
Iterator<Entry<Integer, String>> iterator =map.entrySet().iterator();

ListIterator和Iterator的区别
迭代List集合时,推荐使用ListIterator

  1. iterator()方法在set和list接口中都有定义,但是ListIterator()仅存在于list接口中(或实现类中);

  2. ListIterator有add()方法,可以向List中添加对象,而Iterator不能

  3. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

  4. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

  5. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。  

  因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。其实,数组对象也可以用迭代器来实现。


for循环和迭代器谁更快?
主要看遍历的集合的数据结构是否合适 : 

  for循环依据索引来遍历对象,所以在随机访问中比较快(比如ArrayList)

  迭代器的next()采用的是顺序访问方法,所以在顺序访问的集合中速度更快(比如LinkedList)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值