MyException - 我的异常网
当前位置:我的异常网» J2SE » 哪位讲下 for each 循环解决方法

哪位讲下 for each 循环解决方法

www.MyException.Cn  网友分享于:2013-01-11  浏览:19次
哪位讲下 for each 循环
以前在C++中没有这个循环,学的时候也没学明白。刚刚在看“用户自定义类”,这节的范例代码又用到了这个循环,哪位高手给讲解一下

Java code
import java.io.Console;
import java.util.*;
import java.lang.System;
import java.math.BigInteger;
import java.io.*;

public class EmployeeTest
{
    public static void main(String[] args)
    {
        Employee[] staff = new Employee[3];
        
        staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);
        staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
        staff[2] = new Employee("Tone Tester", 40000, 1990, 3, 15);
        
        for(Employee e : staff)
            e.raiseSalary(5);
        
        for(Employee e : staff)
            System.out.println("name = " + e.getName() + " ,salary=" + e.getSalary() + "hireDay="
                    + e.getHireDay() );
    }
}

class Employee
{
    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        GregorianCalendar  calendar = new GregorianCalendar(year, month-1, day);
        hireDay = calendar.getTime();
    }
    
    public String getName()
    {
        return name;
    }
    
    public double getSalary()
    {
        return salary;
    }
    
    public Date getHireDay()
    {
        return hireDay;
    }
    
    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }
    
    private String name;
    private double salary;
    private Date hireDay;
}


------解决方案--------------------
for each 就是遍历整个集合,跟for差不多 个人感觉。

如果要处理集合中所有元素的话foreach方便,不是所有就for呗 个人理解仅供参考。。。。
------解决方案--------------------

Effective Java 第46条:for-each循环优先于传统的for循环

Effective Java 下载地址 http://download.csdn.net/detail/lnf13/203347


------解决方案--------------------
for(Employee e : staff)
e.raiseSalary(5);
等同于
Java code

for(int i = 0; i < 3; i++) {
    staff[i].raiseSalary(5);
}

------解决方案--------------------
for each语句是由iterator实现的,正如你所说,他们的不同之处就在于remove()方法上。
一般调用删除方法都是集合的方法,例如:
List list = new ArrayList();
list.add(...);
list.remove(...);
但是,如果在循环的过程中调用集合的remove()方法,就会导致循环出错,例如:
for(int i=0;i<list.size();i++){
list.remove(...);
}
循环过程中list.size()的大小变化了,就导致了错误。
所以,如果你想在循环语句中删除集合中的某个元素,就要用迭代器iterator的remove()方法,因为它的remove()方法不仅会删除元素,还会维护一个标志,用来记录目前是不是可删除状态,例如,你不能连续两次调用它的remove()方法,调用之前至少有一次next()方法的调用。
如果你想了解的更透彻,可以查看一下原码,看它是怎么实现的。

因为for each语句是由iterator语句实现的,所以如果你在循环中删除某个元素时,应该用iterator的remove()方法,可是这时你又没有iterator对象,怎么调用呢?
所以,这种情况下,一般还是用iterator来循环访问,并筛选删除。

说白了,for each就是为了让用iterator循环访问的形式看着更好看,写起来更方便。但如有删除操作,当然还是用它原来的形式了。
------解决方案--------------------
for(type elments : type[])
{
states
}
顺序遍历type[]中的每个元素并赋值给elments在states中执行相应操作。
------解决方案--------------------
学习学习
------解决方案--------------------
都是一种循环结构,如果可以用foreach的尽量用,不行用for也一样,区别在于用foreach可能报空指针异常的概率比直接用for的概率要小。性能差异基本可以忽略
------解决方案--------------------
foreach 主要是对容器的遍历。如:数组,List。遍历的对象是只读的。

文章评论

总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
 程序员的样子
程序员的样子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
代码女神横空出世
代码女神横空出世
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
中美印日四国程序员比较
中美印日四国程序员比较
老程序员的下场
老程序员的下场
旅行,写作,编程
旅行,写作,编程
编程语言是女人
编程语言是女人
10个调试和排错的小建议
10个调试和排错的小建议
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
漫画:程序员的工作
漫画:程序员的工作
那些争议最大的编程观点
那些争议最大的编程观点
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
每天工作4小时的程序员
每天工作4小时的程序员
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
我是如何打败拖延症的
我是如何打败拖延症的
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员和编码员之间的区别
程序员和编码员之间的区别
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员都该阅读的书
程序员都该阅读的书
我的丈夫是个程序员
我的丈夫是个程序员
程序员必看的十大电影
程序员必看的十大电影
为什么程序员都是夜猫子
为什么程序员都是夜猫子
Java程序员必看电影
Java程序员必看电影
一个程序员的时间管理
一个程序员的时间管理
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
如何成为一名黑客
如何成为一名黑客
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有