Java之增强的for 循环

 

3. 增强for循环

1) 作用:

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

2)  jdk5以前怎么迭代

3) 增强for循环迭代数组

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

// 传统方式

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

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

         Strings = 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()) {

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

         System.out.println(str);

}

*/

// 传统方式2

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

         Strings = (String) iter.next();

         System.out.println(s);

}

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

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

for(Object obj : list) {

         Strings =  (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()) {

         Stringkey = (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

         Stringkey = (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() {

         Listlist = 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() {

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

 

publicclass Demo3 {

 

         @Test

         public void test3(){

                   Map map=new HashMap();

                   //Map map2=newLinkedHashMap<K, V>();

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

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

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

                   //传统方式1

                   Set set=map.keySet();

                   Iterator it=set.iterator();

                   while(it.hasNext()){

                            Stringkey=(String)it.next();

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

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

                   }

                   //传统方式2

                   Set set2=map.entrySet();

                   Iterator it2=set2.iterator();

                   while(it2.hasNext()){

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

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

                   }

                   //增强for循环的1种方式

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

                            Stringkey2=(String)obj;

                            Stringvalue2=(String)map.get(key2);

                            System.out.println("key2="+key2+",value2="+value2);

                   }

                   //增强for循环的2种方式

                   for(Objectobj:map.entrySet()){

                            Map.Entryentry3=(Entry) obj;

                            String key3=(String)entry3.getKey();

                            Stringvalue3=(String) entry3.getValue();

                            System.out.println("key3="+key3+",value3="+value3);

                   }

                   //增强for循环需要注意的问题:只适合取数据

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

                   for(int i: arr){

                            i=10;

                   }

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

                   List li=new ArrayList();

                   li.add("1");

                   for(Object obj : li){

                            obj="888";

                   }

                   System.out.println(li.get(0));//1

         }

}

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

posted @ 2015-07-25 19:13  dingxiaoyue  阅读(370)  评论(0编辑  收藏  举报