A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

影子木木

初级黑马

  • 黑马币:0

  • 帖子:17

  • 精华:0

© 影子木木 初级黑马   /  2012-10-4 12:11  /  2423 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 影子木木 于 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循环的要求呢?

9 个回复

倒序浏览
本帖最后由 夏诗瑶 于 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. }
复制代码
回复 使用道具 举报
用Iterator就不用for了,用while循环更简洁。
newAl.add(newAl.add(list.get(i)));//?为什么用2个add.
回复 使用道具 举报
看看我给你问题解决了嘛。
回复 使用道具 举报
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 12:14
首先,你得明白 add方法返回的是 布尔型变量,如果用你第二种方法,两次调用add方法。也能实现删除相同元素 ...

谢谢哈! 我都不知道我当时怎么掉两次add方法,调一次就OK了。
回复 使用道具 举报
夏诗瑶 发表于 2012-10-4 12:49
看看我给你问题解决了嘛。

哥们,咋个结贴呢?
回复 使用道具 举报
夏天 初级黑马 2012-10-4 19:29:15
8#
影子木木 发表于 2012-10-4 19:22
谢谢哈! 我都不知道我当时怎么掉两次add方法,调一次就OK了。

不客气,不客气, 多思考是好事,加油了。朋友。
回复 使用道具 举报
夏天 初级黑马 2012-10-4 19:31:43
9#
在1楼上面,也就是自己贴的最下面。 有个编辑按钮,然后把主题改成已解决就OK了
回复 使用道具 举报
夏诗瑶 发表于 2012-10-4 19:31
在1楼上面,也就是自己贴的最下面。 有个编辑按钮,然后把主题改成已解决就OK了 ...

O了,谢了。一起加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马