迭代器小结

news/2024/7/4 8:24:46

为什么使用迭代器?

  • 数组的遍历,可以通过for循环来实现,其原因是数组对于数据的储存是有序的(order);但是,对于Set这种无序(no order)的数据结构,就无法通过for循环来实现,此时,我们就需要引入一种新的访问方式来实现对数据的操作——迭代器。
  • 迭代器是一种轻量级的对象操作,其接口有四个抽象方法:
 1 public interface Iterator<E> {
 2 
 3     boolean hasNext();
 4 
 5 
 6     E next();
 7 
 8 
 9     default void remove() {
10         throw new UnsupportedOperationException("remove");
11     }
12 
13 
14     default void forEachRemaining(Consumer<? super E> action) {
15         Objects.requireNonNull(action);
16         while (hasNext())
17             action.accept(next());
18     }
19 }

 

–Object next():返回集合里下一个元素。

–boolean hasNext():如果被迭代的集合还元素没有被遍历,则返回true。

–void remove() :删除集合里上一次next方法返回的元素

–void forEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集合元素。

 

迭代器的内部简单实现:

 1 public class SimpleIter {
 2         private int size =elem.length;
 3         private int coursor=-1;      //由实现的方法可知,游标在开始遍历List的时候从下标【0】开始,所以初始值赋予-1
 4     
 5     public int size(){
 6         return this.size;
 7     }
 8     
 9     public boolean hasNext(){
10         return coursor+1<size;       //为了防止下标越界,所以coursor+1小于List长度
11     }
12 
13     public String next(){
14         coursor++;
15         return elem[coursor];
16     }
17     
18     public void remove(){
19         System.arraycopy(elem, coursor+1, elem, coursor,this.size-(coursor+1)); 
20         this.size--;
21         this.coursor--;              //为了使游标可以指向删除某元素之后的正确指向,每次删除元素,需要coursor-1
22     }    

 

转载于:https://www.cnblogs.com/nothingAJ/p/6605862.html


http://www.niftyadmin.cn/n/2087931.html

相关文章

Linux如何在系统运行过程中修改内核参数

RedHat向管理员提供了非常好的方法&#xff0c;使我们可以在系统运行时更改内核参数&#xff0c;而不需要重新引导系统。这是通过/proc虚拟文件系统实现的。/proc/sys目录下存放着大多数的内核参数&#xff0c;并且设计成可以在系统运行的同时进行更改。下面我们以打开内核的 i…

2018-10-29 签到

转载于:https://blog.51cto.com/14019809/2310566

开发脚本自动部署nginx反向代理及监控

一、脚本自动部署反向代理、web、nfs I、部署nginx反向代理三个web服务&#xff0c;调度算法使用加权轮询: 服务端&#xff1a;192.168.16.254 #!/bin/bashecho 开始安装........ yum install epel-release -y yum install nginx -y echo 开始配置........... psd "/etc/…

antd form表单一行多个组件并对其校验

一行一个标签对应多个输入组件&#xff0c;这个需求很常见但在官方例子没看到合适的&#xff0c;因为官方建议&#xff1a; 注意&#xff1a;一个 Form.Item 建议只放一个被 getFieldDecorator 装饰过的 child&#xff0c;当有多个被装饰过的 child 时&#xff0c;help require…

怎樣制作线段动画_PPT如何制作简易动画

原标题&#xff1a;PPT如何制作简易动画很多时候&#xff0c;我们看到的一些简易动画&#xff0c;其实用PPT就可以制作了。这里分享一下如何用PPT制作简易动画方法和步骤&#xff1a;简易线条动画&#xff1a;1. 打开幻灯片—点击“插入”、“形状”&#xff0c;选择线条&#…

java基础篇5之泛型

1 泛型的基本应用 //反射方式 指定类型&#xff0c;就不用强转 Construcctor<String> constructor String.class.getConstructor(Stringbuffer.class); 泛型是提供给javac编译器使用的&#xff0c;可以限定集合输入的类型&#xff0c; 编译器编译带类型说明的集合时&…

vue缓存之keep-alive,设置想要缓存的页面

结合router&#xff0c;缓存部分页面 <keep-alive><router-view v-if"$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if"!$route.meta.keepAlive"></router-view> {path: /,name: Hello,compo…

Vue.js 2.2 卡片api

给vue开发者和爱好者发送点福利&#xff01; 卡片上一共117个api&#xff0c;方便查阅 网址: https://vuejs-tips.github.io/cheatsheet Github: https://github.com/vuejs-tips/cheatsheet PDF: https://vuejs-tips.github.io/cheatsheet/vuejs-cheatsheet.pdf 原文地址&#…