zoukankan      html  css  js  c++  java
  • for循环增强

    1) 作用:

     对存储对象的容器进行迭代   

    2)  jdk5以前怎么迭代

    3) 增强for循环迭代数组

    String [] arr = {"a", "b", "c"}; //数组的静态定义方式,只试用于数组首次定义的时候

    // 传统方式

    for(int i=0; i<arr.length; i++) {

    // i依次表示数组的角标

    String s = arr[i];

    System.out.println(s);

    }

    System.out.println("-------------------------------------");

    // 在jdk5中我们可以使用增强for循环迭代

    // 增强for循环括号里写两个参数,第一个是声明一个变量,变量类型必须是数组元素的类型

    // 第二个就是需要迭代的容器

    // for循环会循环容器的length次, 每次都将容器的第n-1个元素赋值给声明的变量

    for(String s : arr) {

    // 循环体, 执行arr.length

    // 每次都将arr中的第n-1个元素给s

    System.out.println(s); //

    }

     

    4) 单列集合 Collection

    List list = new ArrayList();

    list.add("aaa");

    list.add("bbb");

    list.add("ccc");

     

    // 传统方式1

    /* 1.获得迭代器

    Iterator iter = list.iterator();

    // 2.循环判断迭代器是否有下一个

    while(iter.hasNext()) {

    String str = (String) iter.next(); // 将迭代器的指针移向下一个,并将迭代当前指向的元素返回

    System.out.println(str);

    }

    */

    // 传统方式2

    for(Iterator iter=list.iterator(); iter.hasNext(); ) {

    String s = (String) iter.next();

    System.out.println(s);

    }

    System.out.println("--------------------------------");

    // 增强for循环, 没有使用泛型的集合能不能使用增强for循环迭代?能

    for(Object obj : list) {

    String s =  (String) obj;

    System.out.println(s);

    }

     

    5) 双列集合 Map

    Map map = new HashMap();

    map.put("a", "aaa");

    map.put("b", "bbb");

    map.put("c", "ccc");

     

    // 传统方式迭代1

    // 1. 获得所有的key

    Set keys = map.keySet();

    // 2.迭代keys获得所有的key

    Iterator iter = keys.iterator();

    while(iter.hasNext()) {

    String key = (String) iter.next(); // a b c

    // 3.根据key获得对应的value

    String value = (String) map.get(key);

    System.out.println(key + "=" + value);

    }

    System.out.println("---------------------------------");

    // 传统方式2,必须掌握这种方式

    // 1.获得所有的键值对Entry对象

    Set entrys = map.entrySet();

    // 2.迭代出所有的entry

    iter = entrys.iterator();

    while(iter.hasNext()) {

    Map.Entry entry = (Entry) iter.next();

    // 分别获得key和value

    String key = (String) entry.getKey();

    String value = (String) entry.getValue();

    System.out.println(key + "=" + value);

    }

    System.out.println("-------------------------------------");

    System.out.println("增强for循环迭代,");

    // 增强for循环迭代,

    // 原则上map集合是无法使用增强for循环来迭代的,

    // 因为增强for循环只能针对实现了Iterable接口的集合进行迭代

    // Iterable是jdk5中新定义的接口,就一个方法iterator方法

    // 只有实现了Iterable接口的类,才能保证一定有iterator方法

    // java有这样的限定是因为增强for循环内部还是用迭代器实现的

     

    // 而实际上,我们可以通过某种方式来使用增强for循环

    for(Object obj : map.entrySet()) {

    // obj 依次表示Entry

    Map.Entry entry = (Entry) obj;

    System.out.println(entry.getKey() + "=" + entry.getValue());

    }

    6)集合迭代注意问题

    // 在使用迭代器迭代集合的过程中,不能对集合进行增删操作

    @Test

    public void test4() {

    List list = new ArrayList();

     

    list.add("wangwu");

    list.add("zhangsan");

    list.add("lisi");

     

    Iterator iter = list.iterator();

    while(iter.hasNext()) {

    String name = (String) iter.next();

    if("wangwu".equals(name)) {

    // 从集合中删掉

    //list.remove(name);

    // 迭代过程中删除元素需要调用迭代器的方法

    iter.remove(); // 删除我迭代的集合被我迭代的最后一个元素

    }

    }

    // 1 2 4

    System.out.println(list.size());

    }

     

    @Test

    public void test5() {

    List list = new ArrayList();

     

    list.add("aa");

    list.add("bb");

     

    // 使用ListIterator迭代器

    ListIterator listIterator = list.listIterator();

    while(listIterator.hasNext()) {

    listIterator.next();

    // 迭代过程中增加元素

    listIterator.add("cc");

    }

    System.out.println(list.size());

    }

    7) 增强for循环注意问题

    //在使用增强for循环时,不能对元素进行赋值

    int[] arr = {1,2,3};

     

    for(int num : arr) {

    num = 0;

    }

     

    System.out.println(arr[1]);

  • 相关阅读:
    $Poj2228$/洛谷$SP283 Naptime$ 环形$DP$
    $Poj1952 $洛谷$1687 Buy Low,Buy Lower$ 线性$DP+$方案计数
    $Poj3585 Accumulation Degree$ 树形$DP/$二次扫描与换根法
    洛谷$1541$ 乌龟棋 线性$DP$
    $Loj10157$ 皇宫看守 树形$DP$
    $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
    $Loj10155$ 数字转换(求树的最长链) 树形$DP$
    洛谷$2015$二叉苹果树
    $CH5302$ 金字塔 区间$DP$/计数类$DP$
    [hiho1035] 自驾旅行III
  • 原文地址:https://www.cnblogs.com/qq809306794/p/3183199.html
Copyright © 2011-2022 走看看