Iterator

  hasNext  next

Iterator 迭代器

Collection提供了一个遍历集合的通用方式,迭代器(Iterator)。

获取迭代器的方式是使用Collection定义的方法:

不同的集合迭代器的实现不完全相同

Iterator是接口

1. hasNext与next方法

迭代器用于遍历集合的两个主要方法:
boolean hasNext():     判断集合是否还有元素可以遍历。
E next():        返回迭代的下一个元素
遍历集合应遵循“先问后取”的方式,也就是说,应当在确定hasNext()方法的返回值为true的情况下再通过next()方法取元素。
由此可以看出,使用迭代器遍历集合是通过boolean值驱动的,所以它更适合使用while循环来遍历。

public class TestIterator {
/*
* 问取删
* 遍历集合
*/
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("object-c");
//获取迭代器
Iterator it = c.iterator();
//问
while(it.hasNext()){
//获取元素
String str = (String)it.next();
System.out.println(str); }
System.out.println("while over");
for(;it.hasNext();){ for循环也能实现 可以写一个 ,一个都不写 是死循环
//获取元素
String str = (String)it.next();
//删除包含c的字符串
if(str.indexOf("c")!=-1){
it.remove();
}
System.out.println(str); }
System.out.println("for over"); 这里只遍历一次 iterator 询问 完了 没有了 for在询问也是一样的结果 }
}

增强for循环

Java5.0之后推出了一个新的特性,增强for循环,也称为新循环。该循环不通用于传统循环的工作,其只用于遍历集合或数组。
语法:

for(元素类型 e : 集合或数组){
  循环体
}

新循环并非新的语法,而是在编译过程中,编译器会将新循环转换为迭代器模式。所以新循环本质上是迭代器。

class TestNewfor{
public static void main(String[] args) {
Collection c =new ArrayList();
c.add("java");
c.add("cpp");
c.add("php");
c.add("c#");
c.add("object-c");
//顺序的从集合c中取出元素 赋值给o 进入循环
for(Object X : c ){
String str = (String)X;
System.out.println(str);
}
//遍历数组
String[] array ={"a","b","c","d"};
for(String str : array){
System.out.println(str);
}
}
}

泛型机制

泛型在集合汇总的应用

泛型是Java SE 5.0引入的特性,泛型的本质是参数化类型。在类、接口和方法的定义过程中,所操作的数据类型被传入的参数指定。
Java泛型机制广泛的应用在集合框架中。所有的集合类型都带有泛型参数,这样在创建集合时可以指定放入集合中的对象类型。

Java编译器可以据此进行类型检查,这样可以减少代码在运行时出现错误的可能性。
我们来举个例子,比如ArrayList,其在定义时是这样的:

public class ArrayList<E> {
… … …
public boolean add(E e) {…};
public E get(int index) {…};
}

由此我们可以看出,再声明ArrayList时,类名的右侧有一个<E>。"<>"表示泛型,而其中可以使用数字字母下划线(数字不能的第一个字符)来表示泛型的名字。(通常我们使用一个大写字母来表示,当然这个不是规定。)这时,在类中声明的方法的参数,返回值类型可以被定义为泛型。这样在创建对象时可以将类型作为参数传递,此时,类定义所有的E将被替换成传入的参数。
例如:

/**
* 在使用一个类的时候,动态的传人一个或多个类型
* 来指定该类属性,参数,以及返回值的类型
* @author Administrator
*
*/
public class TestColl {
public static void main(String[] args) {
//泛型 在集合中的使用时用来约束集合元素的类型
Collection<String> c = new ArrayList<String>(); c.add("a");
c.add("b");
c.add("c");
for(String str : c){
System.out.println(str);
}
/*
* 迭代器也支持泛型,我们为迭代器指定泛型的类型
* 应该与他遍历的集合的泛型类型一致
*/
Iterator<String> it = c.iterator();
while(it.hasNext()){
String str = it.next();
System.out.println(str);
} }

迭代器、泛型和增强For的更多相关文章

  1. JAVA基础之集合、Iterator迭代器、泛型及增强for循环

    个人理解: 对于集合,首先要明确的是最顶层的接口是Collection接口类,其包含一些基本的方法以便子类调用,不过在定义的时候最好定义好数据类型,以免遍历时还得必须进行向上转型:特别注意的是其没有关 ...

  2. java-ArrayList中去重复字符串或重复对象、LinkedList集合、泛型、增强for、静态导入、可变参数、asList()方法、集合嵌套

    1.去除ArrayList中重复字符串元素方式 * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 /** * A:案例演示 * 需求 ...

  3. -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器

    集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别?                 A:长度区别                  ...

  4. 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义

    今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...

  5. java基础第十二篇之集合、增强for循环、迭代器和泛型

    Collection接口中的常用方法: * 所有的子类子接口都是具有的 * 集合的方法:增删改查 * * public boolean add(E e);//添加元素 返回值表示是否添加成功 * pu ...

  6. day002-List类、泛型

    1. 集合 集合是容器,可以存储任意类型的数据,集合的长度可变. 1.1 集合和数组的比较 1.2 集合分类 单列集合:每次存储时,存储一个元素(Collection),包括:list.set 双列集 ...

  7. 简单来说一下java中的泛型,ssh中dao层使用会简化代码量

    原来仅仅是听老师说泛型特别好用,但是后来一直弄android用的泛型就比較少了.但是感觉它真的非常重要,于是花了一下午的时间写了个demo.好,老规矩.上代码: 首先,sysout是个工具,可是用着不 ...

  8. Java中的泛型

    1:泛型(掌握) (1)泛型概述 是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型. (2)格式: <数据类型> 注意:该数据类型只能是引用类型. (3)好处: ...

  9. Java List中迭代器遍历

    在java中,List接口从Collection接口中继承了 iterator()函数,返回值是一个T类型的迭代器(泛型),T是List中元素的类型 public class TestListAndI ...

随机推荐

  1. 利用sql批量删除表,存储过程

    利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...

  2. 视差贴图(Parallax Mapping)

    使用顶点光照的模型,当模型的面数很少的时候,光照效果会显得很奇怪,因为只有顶点上的光照是正确计算出来的,三角面上的光照都是通过硬件插值得到,所以难免会出现问题.基于像素的光照可以很好的改善这个问题.如 ...

  3. C# 图片旋转360度程序

    这几天开发一个程序,需要将一个图片旋转360度然后每一个角度保存下来.刚开始本来想着是让美工弄的,但是让一个美工手动转360度,她会喷你一脸. using System; using System.C ...

  4. 使用python脚本实现基于指定字符串的文本排序

    朋友用ansible导出了一个文件,文件中包含上千台机器的磁盘信息,他想要知道哪些机器最需要赶紧扩磁盘.思路是,按剩余磁盘空间百分数,从小到大对文本内容重新排序.下面是具体实现. 源文件ip.txt的 ...

  5. Use BEC to do mobile phone forensics

    Belkasoft Evidence Center makes me very impressed that it supports lots of evidence type. I have to ...

  6. Java 编译报错:illegal character

    1.检查编译版本:1.5还是1.6 2.重新引用一下Jar包

  7. 3Git使用入门

    1.Git作用:对源代码进行管理: 2.安装Git命令: apt-get install git apt-get install git-doc git-svn git-email git-gui g ...

  8. SqlServer 事务和异常处理示例

    BEGIN TRANSACTION--开始事务 DECLARE @errorSun INT --定义错误计数器SET @errorSun=0 --没错为0 UPDATE dbo.Test SET te ...

  9. [转]CentOS开机启动脚本

    转载自http://www.2cto.com/os/201306/220559.html   我的一个Centos开机自启动脚本的制作   一.切换到/etc/init.d/   二.制作sh脚本 v ...

  10. Linux使用Shell脚本实现ftp的自动上传下载

    1. ftp自动登录批量下载文件. #####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<<!open 1 ...