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

Java之增强的for 循环的更多相关文章

  1. Java中增强for循环的用法

    此方法在jdk1.5之后才出现. 1:遍历数组 语法: for (Type value : array) { expression value; } 例子: void Sum() { int[] ar ...

  2. JAVA笔记18-容器之二增强的for循环(不重要)

    JDK1.5增强的for循环(foreach??)

  3. Java入门 - 语言基础 - 09.循环结构

    原文地址:http://www.work100.net/training/java-loop.html 更多教程:光束云 - 免费课程 循环结构 序号 文内章节 视频 1 概述 2 while循环 3 ...

  4. 增强的for循环(或foreach)

    增强的for循环(也称为foreach循环):不用下标变量,顺序的訪问整个数组.不能以其它顺序訪问数组,或者改变数组的元素. for(elementType element: arrayRefVar) ...

  5. Java使用条件语句和循环结构确定控制流

    与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流.本文将简单讲解条件.循环和switch. 一.块作用域 块(block),即复合语句.是指由一对大括号括起来的若干条简单的Java语句 ...

  6. Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用

    ylbtech-Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用 1.返回顶部 1. Java 实例 - for 和 foreach循环使用 ...

  7. 关于增强的for循环

    增强的for循环例子:public static<AnyType> void print(Collection<AnyType> coll){ for(AnyType item ...

  8. Java学习笔记八:Java的流程控制语句之循环语句

    Java的流程控制语句之循环语句 一:Java循环语句之while: 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 ...

  9. Java数组使用以及foreach循环

    Java数组使用以及foreach循环 二话不说,先甩一个简单的程序: final int NUM= 10; int[] arrays = new int[NUM]; System.out.print ...

随机推荐

  1. OpenCV OpenGL手写字符识别

    另外一篇文章地址:这个比较详细,但是程序略显简单,现在这个程序是比较复杂的 http://blog.csdn.net/wangyaninglm/article/details/17091901 整个项 ...

  2. 单片机驱动AT24C02存储芯片

    AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗.AT24C02有一个8字节页写缓冲器.该器件通过IIC总 ...

  3. mybatis源码之PreparedStatementHandler

    /** * @author Clinton Begin */ public class PreparedStatementHandler extends BaseStatementHandler { ...

  4. .net中的各种委托(Delegate、Action、Func)

    1.Delegate,委托的鼻祖 protected delegate int ClassDelegate(int x, int y);//定义委托类型及参数 static void Main(str ...

  5. element.dispatchEvent is not a function的解决

    Firebug中的出错提示: element.dispatchEvent is not a function element.dispatchEvent(event); prototype.js (第 ...

  6. C++负数取模

    预习: r=余数 a=被除数 b=除数 c=商 a/b=c........r r=a-(a/b)*b 一.下面的题目你能全做对吗?1.7/4=?2.7/(-4)=?3.7%4=?4.7%(-4)=?5 ...

  7. 详解Java的Spring框架中的注解的用法

    转载:http://www.jb51.net/article/75460.htm 1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: class UserMa ...

  8. c#语言中的Process进程类型的使用示例

    下面我们用一个简单的例子来说明如何使用 我们用vs2015新建一个解决方案,这个解决方案包含两个WINFORM窗体项目,一个是SoftWare.Test,一个是SoftWare.Update,如下图所 ...

  9. 【Java入门提高篇】Day16 Java异常处理(下)

    今天继续讲解java中的异常处理机制,主要介绍Exception家族的主要成员,自定义异常,以及异常处理的正确姿势. Exception家族 一图胜千言,先来看一张图. Exception这是一个父类 ...

  10. UML语言中五大视图和九种图形纵览

    UML语言纵览 视图 UML语言中的视图大致分为如下5种: 1.用例视图.用例视图强调从系统的外部参与者(主要是用户)的角度看到的或需要的系统功能. 2.逻辑视图.逻辑视图从系统的静态结构和动态行为角 ...