迭代器、泛型和增强For

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);
        }

    }
时间: 2024-08-02 11:14:52

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

day191、集合 2、Iterator迭代器 3、增强for循环 4、泛型

今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 =======================第一节课开始============================================= ###01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<

Java的Iterator迭代器补充,增强for循环,泛型,List接口,set接口

1.Iterator迭代器:(1)类型转换异常:ClassCastException:集合中存放的是多个对象时,在强转时会出现: package com.oracle.demo01; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class demo01 { public static void main(String[] args) { method03();

我的学习之路_第六章_迭代器,泛型

[Collection] 类 接口类 所属包:java.util.Collection Collection类是集合的最顶层的接口,定义了集合共性的方法. 接口无法创建对象,使用多态的方式创建对象 Collection<集合中的数据类型(泛型)> 变量名 = new ArrayList<集合中的数据类型(泛型)>(); Collection接口常用子类接口有: List接口 set接口 List接口常用子类有: ArrayList类 LinkedList类 set接口常用的子类有:

Java基础——集合(三)——泛型、增强for、工具类

         接上篇,<Java基础--集合(二)--迭代器.Map集合> 六.泛型 (1)定义: 泛型是一种把明确类型的工作放在了创建对象或者调用方法时候才去明确的特殊的类型. (2)格式: <数据类型> ArrayList<String> aList=new ArrayList<String>(); <String> 即表示的是泛型 (3)好处:(掌握) A:解决了黄色警告线问题 B:把运行期间的转换异常给提前到了编译期间 C:优化了程序

一、javaSE (十六)List的子类、泛型、增强for循环、静态导入、可变参数

1:List的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数組,查迿快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数組,查询快,增删慢 线程安全,效率低 LinkedList: 底层数据结枃是链表,查询慢,增删快 线程不安全,效率高 (2)Arraylist A:没有特有功能需要学习 B:案例 a: Arraylist存储字符串并遍历 b: Arraylist存储自定义对象并遍历 (3)Vector A:特有功能 a:添加: public void

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

Collection接口中的常用方法: * 所有的子类子接口都是具有的 * 集合的方法:增删改查 * * public boolean add(E e);//添加元素 返回值表示是否添加成功 * public boolean remove(Object o);//删除元素,返回值表示是否删除成功 * 没有修改方法 * 查询元素的方法没有,但是 * public int size();//查询集合集合中元素的个数 * //其他方法: * public void clear();//清空集合 * p

java之Iterator迭代器 增强for循环

1.集合在存储元素时,如果未明确数据类型,可以存储object类型(各种数据),但在提取时,需要用一种通用的方法获得元素.这就是Iterator接口中的hasNext()/next()方法. 然而Iterator接口未有具体的实现类,但collection接口中有一个抽象的iterator()方法,可以得到 Iterator对象.并且collection所有子类都实现了这个方法. 1 //collection 继承Iterable中的Iterator的抽象方法: 2 Collection<Int

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

原来只是听老师说泛型特别好用,但是后来一直弄android用的泛型就比较少了,可是感觉它真的很重要,于是花了一下午的时间写了个demo,好,老规矩,上代码: 首先,sysout是个工具,但是用着不顺手,博主按照自己的习惯写了一个工具类, s: package cn.edu.sjzc.fanyafeng.testlamejni.util; /** * System统一管理类 * * @author 樊亚风 */ public class S { private S() { /* cannot be

day002-List类、泛型

1. 集合 集合是容器,可以存储任意类型的数据,集合的长度可变. 1.1 集合和数组的比较 1.2 集合分类 单列集合:每次存储时,存储一个元素(Collection),包括:list.set 双列集合:每次存储时,存储两个元素(Map) 1.3 Collection 是所有单列集合的父类 1.4 单列集合的继承体系 Collection List ArrayList LinkedList Vector Set HashSet LinkedHashSet 2. Iterator迭代器 迭代说的就