黑马程序员技术交流社区

标题: 遍历ArrayList用For循环和Iterator的区别 [打印本页]

作者: 影子木木    时间: 2012-10-4 12:11
标题: 遍历ArrayList用For循环和Iterator的区别
本帖最后由 影子木木 于 2012-10-4 19:33 编辑

public static ArrayList getNewList(ArrayList list){
ArrayList newAl = new ArrayList();
for (Iterator iterator = list.iterator();iterator.hasNext();) {
  Object object = iterator.next();
  if (!newAl.contains(object))
   newAl.add(object);
}
// for (int i = 0; i < list.size(); i++) {
//  if (!newAl.contains(list.get(i))) {
//   newAl.add(newAl.add(list.get(i)));
//  }
// }
return newAl;

}
上面一个for是用Iterator做的, 怎么下面一个for循环达不到上面for循环的要求呢?
作者: 夏天    时间: 2012-10-4 12:14
本帖最后由 夏诗瑶 于 2012-10-4 12:49 编辑

首先,你得明白 add方法返回的是 布尔型变量,如果用你第二种方法,两次调用add方法。也能实现删除相同元素,但是集合中会增加布尔型变量,代码如下。。可以自己看看输出结果
  1. import java.util.ArrayList;

  2. import java.util.Iterator;

  3. public class TestDemo {

  4. public static void main(String[] args) {
  5. ArrayList<String> al = new ArrayList<String>();
  6. al.add("zhangsan");
  7. al.add("lisi");
  8. al.add("zhangsan");
  9. al.add("wangwu");

  10. ArrayList<Object> newal = getNewList(al);
  11. for (Iterator<Object> it = newal.iterator(); it.hasNext();) {
  12. System.out.println(it.next());
  13. }
  14. }

  15. public static ArrayList<Object> getNewList(ArrayList<String> list) {
  16. // ArrayList<Object> newAl = new ArrayList<Object>();
  17. // for (Iterator<String> iterator = list.iterator();
  18. // iterator.hasNext();) {
  19. // Object object = iterator.next();
  20. // if (!newAl.contains(object))
  21. // newAl.add(object);
  22. // }
  23. ArrayList<Object> newAl = new ArrayList<Object>();
  24. for (int i = 0; i < list.size(); i++) {
  25. if (!newAl.contains(list.get(i))) {
  26. newAl.add(newAl.add(list.get(i)));
  27. }
  28. }
  29. return newAl;

  30. }

  31. }
复制代码

作者: chjxs    时间: 2012-10-4 12:48
用Iterator就不用for了,用while循环更简洁。
newAl.add(newAl.add(list.get(i)));//?为什么用2个add.
作者: 夏天    时间: 2012-10-4 12:49
看看我给你问题解决了嘛。
作者: 影子木木    时间: 2012-10-4 19:20
chjxs 发表于 2012-10-4 12:48
用Iterator就不用for了,用while循环更简洁。
newAl.add(newAl.add(list.get(i)));//?为什么用2个add. ...

毕老师说,while循环会增加内存中变量,用Iterator放到for循环会减少内存的变量。 至于我调用两次add方法,我现在看这个代码也觉得搞笑,我都不知道我当时咋个想的!
作者: 影子木木    时间: 2012-10-4 19:22
夏诗瑶 发表于 2012-10-4 12:14
首先,你得明白 add方法返回的是 布尔型变量,如果用你第二种方法,两次调用add方法。也能实现删除相同元素 ...

谢谢哈! 我都不知道我当时怎么掉两次add方法,调一次就OK了。
作者: 影子木木    时间: 2012-10-4 19:29
夏诗瑶 发表于 2012-10-4 12:49
看看我给你问题解决了嘛。

哥们,咋个结贴呢?
作者: 夏天    时间: 2012-10-4 19:29
影子木木 发表于 2012-10-4 19:22
谢谢哈! 我都不知道我当时怎么掉两次add方法,调一次就OK了。

不客气,不客气, 多思考是好事,加油了。朋友。
作者: 夏天    时间: 2012-10-4 19:31
在1楼上面,也就是自己贴的最下面。 有个编辑按钮,然后把主题改成已解决就OK了
作者: 影子木木    时间: 2012-10-4 19:34
夏诗瑶 发表于 2012-10-4 19:31
在1楼上面,也就是自己贴的最下面。 有个编辑按钮,然后把主题改成已解决就OK了 ...

O了,谢了。一起加油!




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