黑马程序员技术交流社区

标题: 集合addAll()、removeAll()的一点疑惑... [打印本页]

作者: 陈虹旭    时间: 2012-10-18 16:02
标题: 集合addAll()、removeAll()的一点疑惑...
  1. import java.util.*;
  2. class AddAllDemo
  3. {
  4. public static void main(String[] args)
  5. {
  6. ArrayList a = new ArrayList();
  7. ArrayList b = new ArrayList();
  8. a.add("java01");
  9. a.add("java02");
  10. a.add("java03");
  11. a.add("java04");

  12. b.add("java02");
  13. b.add("java03");
  14. b.add("java04");
  15. b.add("java05");

  16. //a.addAll(b);
  17. System.out.println(a.remove(b));//这里的结果为什么是false
  18. }
  19. }
复制代码
看完视频,本来想理解下addAll()和removeAll()的用法,本来是应该先a.addAll(b),再输出a的
我图省事就直接打印了,没想到结果出乎了我的意料:
输出a.addAll(b);返回结果是true
输出a.removeAll(b);返回结果是false

这个究竟是为什么?求大虾们指点!

作者: 廖智    时间: 2012-10-18 16:13
本帖最后由 廖智 于 2012-10-18 16:22 编辑

你写的删除格式有错误了

作者: 廖智    时间: 2012-10-18 16:15
本帖最后由 廖智 于 2012-10-18 16:42 编辑

import java.util.*;
class AddAllDemo
{
public static void main(String[] args)
{
ArrayList a = new ArrayList();
ArrayList b = new ArrayList();
a.add("java01");
a.add("java02");
a.add("java03");
a.add("java04");

b.add("java02");
b.add("java03");
b.add("java04");
b.add("java05");

//a.addAll(b);
System.out.println(a.remove(b));//这里你写的格式错误了,应该写a.removeAll(b)表示删除a容器中和b相同的所有元素。删除成功就返回true否则返回false。

}
}

删除单个元素格式: a.remove("java01").
作者: 王自强    时间: 2012-10-18 16:18
  1. class Test {
  2.     public static void main(String[] args) {
  3.         ArrayList a = new ArrayList();
  4.         ArrayList b = new ArrayList();
  5.         a.add("java01");
  6.         a.add("java02");
  7.         a.add("java03");
  8.         a.add("java04");

  9.         b.add("java02");
  10.         b.add("java03");
  11.         b.add("java04");
  12.         b.add("java05");

  13.         // a.addAll(b);
  14.         System.out.println(a.remove(b));// 这里的结果为什么是false?因为你写错了大哥。是removeAll,不是remove
  15.     }
  16. }
复制代码

作者: 丁旭    时间: 2012-10-18 16:29
ArrayList的remove方法用来删除集合中指定的元素,集合a中的元素师字符串。你却要删除一个集合b,难道集合a的元素里有集合b?
所以无法删除指定元素,删除失败返回false
简单来说,就是没有找到你要删除的元素。
作者: 丁旭    时间: 2012-10-18 16:31
不管是用remove还是removeAll,返回值为false,就是说没有找到你要删除的元素
作者: 陈虹旭    时间: 2012-10-18 16:33
王自强 发表于 2012-10-18 16:18

我就说这么个意思 写的是remove还是removeAll都无所谓,关键是为什么返回的不是元素而是boolean
作者: 陈虹旭    时间: 2012-10-18 16:36
廖智 发表于 2012-10-18 16:15
import java.util.*;
class AddAllDemo
{

删除成功就返回true,否则返回false
很有帮助,不过你的格式也没有写对 呵呵 谢谢指点!
作者: 李贺晓    时间: 2012-10-18 16:38
import java.util.*;
class AddAllDemo
{
public static void main(String[] args)
{
ArrayList a = new ArrayList();
ArrayList b = new ArrayList();
a.add("java01");
a.add("java02");
a.add("java03");
a.add("java04");
b.add("java02");
b.add("java03");
b.add("java04");
b.add("java05");
//a.addAll(b);
System.out.println(a.removeAll(b));//这里的结果就是true了
}
}
你刚开始的那个用的remove方法,这里的参数是你要删除的元素,删除成功了返回true,你这里没有b,没有删除元素,所以是false
用removeAll方法删除了a中包含的b中的元素,删除一个或一个以上的元素,返回true

作者: 王自强    时间: 2012-10-18 16:39
API上面写的返回值类型是 boolean

boolean removeAll(Collection<?> c)从列表中移除指定 collection 中包含的其所有元素(可选操作)。

看看API嘛
作者: 廖智    时间: 2012-10-18 16:40
陈虹旭 发表于 2012-10-18 16:36
删除成功就返回true,否则返回false
很有帮助,不过你的格式也没有写对 呵呵 谢谢指点! ...

a.removeAll(b)这个结果的返回值是有true和false。
返回true表示删除成功,返回false表示删除失败。
你直接用System.out.println(a.remove)直接输出,打印的当然是true或false。




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