zoukankan      html  css  js  c++  java
  • 迭代器、泛型和增强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);
            }
            
        }
  • 相关阅读:
    Uva 11401 数三角形
    Uva 11538 象棋中的皇后
    数学基础——基本计数方法
    八数码问题
    python 爬poj.org的题目
    python 爬图片
    hiho 第135周 九宫
    Uva 11464 偶数矩阵
    BZOJ 1001 [BeiJing2006]狼抓兔子
    LA 3708 墓地雕塑
  • 原文地址:https://www.cnblogs.com/manue1/p/4481516.html
Copyright © 2011-2022 走看看