在《数据结构与算法(java版)》(《Data structures and algorithms in java》) 中 有这样一段代码
private Stack<Card> [] stacks;public void deal(){
 for(Stack<Card> s:stacks)
   s.push(deck.deal());
}请问for循环中的 冒号 是什么意识这个for循环是不是 和 foreach 循环的结果一样啊?
谢谢

解决方案 »

  1.   

    Jdk1.5的增强循环 语法就和C#的foreach一样
    它在底层是使用的迭代子(Iterator)循环的方式(数组除外) 支持的是数组和Collection(包括List和Set等) 也存在迭代子循环在多线程的即时失败的异常
      

  2.   

    一般在遍历数组等上边用。JDK5.0后新增。
      

  3.   

    JDK1.5新增的特性,基本上没什么用,除了对于普通的顺序遍历写起来方便点,但对于遍历中需要操作遍历中的参数的,这个就不行了
      

  4.   

    可以用增强的for 循环改写为: 
    void cancelAll(Collection c) { 
    for (Object o : c) 
    ((TimerTask)o).close(); 

      

  5.   

    这个其内部不能remove当前元素,否则下次循环抛异常。为什么?
      

  6.   

    自问自答,可以在循环外再做一个专门用于删除的List,并add符合删除条件的内容。循环结束后,原来的List可以用removeAll(delList)来删掉哪些元素。但是在removeAll之前要做一个操作就是判断传入的delList是否为null,因为该方法空参数抛空指针。
    当然,如果用for的序号循环方式,可以用倒序。这样在remove之后向前循环不会导致漏过下一元素。