java--集合的迭代器
2016-04-15 15:08
495 查看
在使用迭代器遍历一个集合的时候,我们需要掌握一下的一些知识:
Iterator iterator():迭代器,集合的专用遍历方式
Object next():获取元素,并移动到下一个位置。
NoSuchElementException:没有这样的元素,因为你已经找到最后了。
boolean hasNext():如果仍有元素可以迭代,则返回 true。
需要注意的是他们的输入赋值方式。
导入的包为:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
我要讲的是一个
这样的输出为:
第一个没有输入,找到原因:Object obj=it.next(); //it读入数据
那么我们注释掉这行以后,就可以得到完整的输出:
我们也可以看看迭代器的使用图解:
迭代器的源码:
集合的继承体系如下:
ArrayList存储字符串并遍历
*
* 我们按照正常的写法来写这个程序, 结果确出错了。
* 为什么呢?
* 因为我们开始存储的时候,存储了String和Integer两种类型的数据。
* 而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错了。
* 但是呢,它在编译期间却没有告诉我们。
* 所以,我就觉得这个设计的不好。
* 回想一下,我们的数组
* String[] strArray = new String[3];
* strArray[0] = "hello";
* strArray[1] = "world";
* strArray[2] = 10;
* 集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。这样就不会在有问题了。
* 而这种技术被称为:泛型。
*
* 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。
* 格式:
* <数据类型>
* 此处的数据类型只能是引用类型。
* 好处:
* A:把运行时期的问题提前到了编译期间
* B:避免了强制类型转换
* C:优化了程序设计,解决了黄色警告线
*/
Iterator iterator():迭代器,集合的专用遍历方式
Object next():获取元素,并移动到下一个位置。
NoSuchElementException:没有这样的元素,因为你已经找到最后了。
boolean hasNext():如果仍有元素可以迭代,则返回 true。
需要注意的是他们的输入赋值方式。
导入的包为:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
我要讲的是一个
package shike; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class hahha { public static void main(String[] args){ Collection c= new ArrayList(); c.add("kaishi"); c.add("fendou"); c.add("weile"); c.add("meixiang"); Iterator it= c.iterator();//c的迭代器为it Object obj=it.next(); //it读入数据 while(it.hasNext()){ //迭代器操作 String s=(String)it.next();//向下转型 System.out.println(s); } } }
这样的输出为:
第一个没有输入,找到原因:Object obj=it.next(); //it读入数据
那么我们注释掉这行以后,就可以得到完整的输出:
我们也可以看看迭代器的使用图解:
迭代器的源码:
public interface Inteator { boolean hasNext(); Object next(); } public interface Iterable { Iterator iterator(); } public interface Collection extends Iterable { Iterator iterator(); } public interface List extends Collection { Iterator iterator(); } public class ArrayList implements List { public Iterator iterator() { return new Itr(); } private class Itr implements Iterator { public boolean hasNext() {} public Object next(){} } } Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add("java"); Iterator it = c.iterator(); //new Itr(); while(it.hasNext()) { String s = (String)it.next(); System.out.println(s); }
集合的继承体系如下:
ArrayList存储字符串并遍历
*
* 我们按照正常的写法来写这个程序, 结果确出错了。
* 为什么呢?
* 因为我们开始存储的时候,存储了String和Integer两种类型的数据。
* 而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错了。
* 但是呢,它在编译期间却没有告诉我们。
* 所以,我就觉得这个设计的不好。
* 回想一下,我们的数组
* String[] strArray = new String[3];
* strArray[0] = "hello";
* strArray[1] = "world";
* strArray[2] = 10;
* 集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。这样就不会在有问题了。
* 而这种技术被称为:泛型。
*
* 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。
* 格式:
* <数据类型>
* 此处的数据类型只能是引用类型。
* 好处:
* A:把运行时期的问题提前到了编译期间
* B:避免了强制类型转换
* C:优化了程序设计,解决了黄色警告线
*/
public class GenericDemo { public static void main(String[] args) { // 创建 ArrayList<String> array = new ArrayList<String>(); // 添加元素 array.add("hello"); array.add("world"); array.add("java"); // array.add(new Integer(100)); //array.add(10); // JDK5以后的自动装箱 // 等价于:array.add(Integer.valueOf(10)); // 遍历 Iterator<String> it = array.iterator(); while (it.hasNext()) { // ClassCastException // String s = (String) it.next(); String s = it.next(); System.out.println(s); } // 看下面这个代码 // String[] strArray = new String[3]; // strArray[0] = "hello"; // strArray[1] = "world"; // strArray[2] = 10; } }
相关文章推荐
- Java图形界面实战如何用键盘控制小球的移动以及接口的讲解
- Java异常捕获之try-catch-finally-return的执行顺序-转载
- java 关于初学面向对象的问题四:抽象类
- Java中有关Null的9件事
- JAVA Static关键字理解
- java反射详解
- eclipse中改变默认的workspace的方法及说明
- 《JAVA高级程序设计》第五周作业
- Spring IllegalArgumentException 异常
- 如何从spring官网下载jar包
- SpringMVC注解@RequestParam全面解析
- JMM(Java内存模型)中的核心概念
- Java技术_Java千百问(0029)_类、对象到底有什么秘密
- java如何异步方式处理业务逻辑
- eclipse快捷键
- java生成彩色附logo二维码
- Java代理模式
- Spring Mvc - 用户注册服务端生成默认头像实现
- MAVEN工程的构建与命令使用
- spring AOP动态代理使用和配置方式(手打)