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);
            }
            
        }
  • 相关阅读:
    204. Count Primes (Integer)
    203. Remove Linked List Elements (List)
    202. Happy Number (INT)
    201. Bitwise AND of Numbers Range (Bit)
    200. Number of Islands (Graph)
    199. Binary Tree Right Side View (Tree, Stack)
    198. House Robber(Array; DP)
    191. Number of 1 Bits (Int; Bit)
    190. Reverse Bits (Int; Bit)
    189. Rotate Array(Array)
  • 原文地址:https://www.cnblogs.com/manue1/p/4481516.html
Copyright © 2011-2022 走看看