黑马程序员技术交流社区

标题: 迭代的问题 [打印本页]

作者: 龚振 龚振 龚振    时间: 2012-4-13 21:55
标题: 迭代的问题
本帖最后由 klas2008 于 2012-4-12 21:29 编辑

谁能帮我分析一下,当我把 Object obj = it.next();拿到外面来时,程序就变成了如图所示,卡住了。
主要想了解一下这个过程是怎样的,怎么就卡住了呢?在哪里卡住了?
import java.util.*;
public class rr{
    public static void main(String[] args){
        ArrayList al = new ArrayList();
        
        al.add("java01");
        al.add("java02");
        al.add("java01");
        al.add("java03");
        al.add("java03");
        al.add("java04");
        
        System.out.println(al);
        
        al = SingleElement(al);
        
        System.out.println(al);
    }
    public static ArrayList SingleElement(ArrayList al){
        ArrayList tempal = new ArrayList();
        
        Iterator it = al.iterator();
        
        Object obj = it.next();
        while(it.hasNext()){
          // Object obj = it.next();
            if(!(tempal.contains(obj))){
                tempal.add(obj);
            }
        }
            return tempal;
    }  
}

QQ截图20120412211704.jpg (7.07 KB, 下载次数: 30)

QQ截图20120412211704.jpg

作者: 贠(yun)靖    时间: 2012-4-13 22:16
  怎么想到把这个放到外面去了?   
   next()是去除集合中的元素,  放到外面只取了一个,while循环就成无线循环了  因为集合里面永远都是 sizi() - 1  个元素了
作者: 黑马-刘昌文    时间: 2012-4-13 22:21
while循环变成了死循环
作者: 马强    时间: 2012-4-13 22:41
Object obj = it.next();
System.out.println(obj);
       while(it.hasNext())
      {           
            if(!(tempal.contains(obj)))
            {
         System.out.println("l");
              tempal.add(obj);
                 System.out.println("2");
           }
        }   (在这几个位置我加入了几个打印语句,发现打印了数组,1,java01,2,之后卡主)-----while不再走if,无限循环了,hasnext返回true,但是不进行next。 一直都是真。
作者: 龚振 龚振 龚振    时间: 2012-4-13 23:02
不小心写出去了,后来不动了就顺便想想。
谢谢各位,终于弄明白了。{:soso_e183:}{:soso_e182:}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2