java Iterator(未完成)
来源:互联网 发布:淘宝直播镜像怎么下载 编辑:程序博客网 时间:2024/05/19 00:41
java Iterator
Iterator是集合的迭代器,在java 集合类中,是 Enumeration 的替代品,它和 Enumeration 有两个区别
- 允许调用者在iteratoe 删除所指向的Collection中的元素, Enumeration 则不行
- 方法名被改进了
Iterator 中只有3个方法,hasNext() , next() , remove()
java 中因为Collection实现了 Iterable, 所以list 和 set 都有了Iterator iterator()这个方法
Iterator 最重要的一点的是,能够对集合进行遍历时修改集合,一般的for循环是做不到的
ArrayList 中的实现(7u40-b43)
/**ArrayList 中定义了内部类Itr*class Itr implements Iterator<E>*重写了iterator方法,返回这个内部类 Itr*/ 813 public Iterator<E> iterator() {814 return new Itr();815 }// 看一下Itr的实现代码 private class Itr implements Iterator<E> {//cursor 相当于遍历的标示,标示下一个位置821 int cursor; // index of next element to return//lastRet就是当前的位置,通常来说,lastRet 比 cursor 小1 ,当调用remove后lastRet会被置为-1d822 int lastRet = -1; // index of last element returned; -1 if no such823 int expectedModCount = modCount;824 825 public boolean hasNext() {// cursor标示的是下一个位置,如果下一个位置是数组的长度,则表示后面没有数据了,好理解826 return cursor != size;827 }828 829 @SuppressWarnings("unchecked")830 public E next() {831 checkForComodification();832 int i = cursor;833 if (i >= size)834 throw new NoSuchElementException();835 Object[] elementData = ArrayList.this.elementData;836 if (i >= elementData.length)837 throw new ConcurrentModificationException();// 以访问第一个元素为例 cursor = 1 lastRet = 0 获取list数组的第0个元素838 cursor = i + 1;839 return (E) elementData[lastRet = i];840 }841 842 public void remove() {//在删除前,必须要进行next 操作843 if (lastRet < 0)844 throw new IllegalStateException();845 checkForComodification();846 847 try {848 ArrayList.this.remove(lastRet);849 cursor = lastRet;850 lastRet = -1;851 expectedModCount = modCount;852 } catch (IndexOutOfBoundsException ex) {853 throw new ConcurrentModificationException();854 }855 }856 857 final void checkForComodification() {858 if (modCount != expectedModCount)859 throw new ConcurrentModificationException();860 }861 }// 从上面的代码分析,如果在remove前不调用next 方法,是会报错的// 从demo中运行,认证了上面的说法 ArrayList list = new ArrayList<String>(); list.add("111"); list.add("222"); list.add("333"); Iterator<String> itr = list.iterator(); while(itr.hasNext()){ itr.remove(); // 这里会报错,因为没有调用next 方法 //java.lang.IllegalStateException }
0 0
- java Iterator(未完成)
- Java学习:容器(未完成)
- Java(编程语言)--未完成
- Java 垃圾回收 (未完成)
- Java 难点记录(未完成)
- Java制作画图板(未完成)
- Java:迭代器(Iterator)
- java 迭代器(Iterator)
- java 迭代器(Iterator)
- 迭代器(iterator)(java)
- JAVA 迭代器(Iterator)
- java初阶学习心得(未完成)
- java的反射机制(未完成)
- java 中的泛型 generic(未完成)
- java验证码破解(未完成)
- java图形界面整理(未完成版)
- 【Java学习4.6】深入数组(未完成)
- java.util.Iterator(迭代器)
- Setup Factory打包时实现第三方DLL文件的注册
- 【Git 教程(9)】 Git 服务器搭建
- linux中nginx挂载php-fpm
- jquery实现监听文本框
- cmd下获取指定进程名的pid号,并通过taskkill结束该进程
- java Iterator(未完成)
- iOS Socket的使用
- Oracle 窗口函数over()与窗口子语句
- Up and running with Kubernetes.io and Raspberry Pis
- iOS 动画教程-自定义 View Controller 呈现转换
- 数位dp
- jemalloc Linux 安装与使用方法
- 手机设计公司最基本的六个部门:ID、MD、HW、SW、PM、Sourcing、QA
- 使用Jquery的inArray() 方法排重