加强for循环,Map,集合应用

增强for循环,Map,集合应用

3. 增强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

    Stringvalue = (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.Entryentry = (Entry) iter.next();

    // 分别获得key和value

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

    Stringvalue = (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.Entryentry = (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");

 

    Iteratoriter = list.iterator();

    while(iter.hasNext()){

       Stringname = (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迭代器

    ListIteratorlistIterator = 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]);