论坛首页 Java企业应用论坛

Collection接口的remove和List接口的remove的差别

浏览 7024 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-02-28  
E remove(int index)
          移除列表中指定位置的元素(可选操作)。

boolean remove(Object o)
          从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。

这种情况真的是编程中的陷阱。。
0 请登录后投票
   发表时间:2011-02-28   最后修改:2011-02-28
一个是在集合中删除指定的对象(传具体的对象);一个是在集合中删除指定位置的元素(传下标)。

呵呵,如果在智能编程工具中,如eclipse中,最好的办法,其实看传的参数结构就知道不同了。根本不用查api
0 请登录后投票
   发表时间:2011-02-28  
原来Collection类中只有remove(E e),而List中除了有继承来的remove(E e);还有自己重载实现的remove(int index);方法

所以上面方法调用的con.remove(0);编译器把它当成从con中删除一个Intege类实例(new Integer(0))

谢谢LZ分享,自己都把这个区别给忘了
0 请登录后投票
   发表时间:2011-02-28  
yangfuchao418 写道
一个是在集合中删除指定的对象(传具体的对象);一个是在集合中删除指定位置的元素(传下标)。

呵呵,如果在智能编程工具中,如eclipse中,最好的办法,其实看传的参数结构就知道不同了。根本不用查api


问题是jdk1.5以后有了装箱机制,传入基本数据类型,也当做Object处理了。
0 请登录后投票
   发表时间:2011-02-28  
zhangyou1010 写道
webee 写道
你呀肯定不看接口编程的,这是两个不同的重载方法!
	Collection<String> con = new ArrayList<String>();
		con.add("a");
		con.add("b");
		con.add("c");
		con.remove(0);
		System.out.println(con.size());

		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.remove(Integer.valueOf(0));
		System.out.println(list.size());


这里没涉及到重载。是接口里的方法规定不一样而已。



呵呵,不叫重载,叫什么,一样的方法名,只是参数不一样,一个是Object,一个是int
0 请登录后投票
   发表时间:2011-02-28   最后修改:2011-02-28
public interface Collection<E> extends Iterable<E> {
    boolean add(E e);
    boolean remove(Object o);
    boolean contains(Object o);
    //...
}

JDK1.6中源代码。个人感觉似乎这个接口设计不是很合适,为什么不是:
boolean remove(E o);
boolean contains(E o);

如果那个接口是泛型的话,lz的问题编译时候就发现了~~~
1 请登录后投票
   发表时间:2011-02-28   最后修改:2011-02-28
发这个贴只能说明你水平有多低,
老夫来教教你
Collection有一个remove(Object o)方法,他删除一个用相等的对象
Collection集合里边是没有顺序的,所以没有办法跟进索引删除
Collection<String> con = new ArrayList<String>();
con.add("a");
con.add("b"); 
con.add("c");
con.remove(0);
System.out.println(con.size());
这段代码是删除一个对象0,但是集合中根本就没有0这个对象,所以就不删除。如果你要删除a必须这样写con.remove("a");

List接口有两个remove方法
remove(Object o)
remove(int index)
下面代码中是使用了第二个重载的方法
List<String> list = new ArrayList<String>(); 
list.add("a"); 
list.add("b"); 
list.add("c"); 
list.remove(0); 
System.out.println(list.size());
这段代码要删除a也可以这样写
list.remove('a');
0 请登录后投票
   发表时间:2011-02-28  
clayton0 写道
zhangyou1010 写道
webee 写道
你呀肯定不看接口编程的,这是两个不同的重载方法!
	Collection<String> con = new ArrayList<String>();
		con.add("a");
		con.add("b");
		con.add("c");
		con.remove(0);
		System.out.println(con.size());

		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.remove(Integer.valueOf(0));
		System.out.println(list.size());


这里没涉及到重载。是接口里的方法规定不一样而已。



呵呵,不叫重载,叫什么,一样的方法名,只是参数不一样,一个是Object,一个是int


谢谢指出,确实是重载,是我弄错了。
0 请登录后投票
   发表时间:2011-03-02  
哪里命名不规范了吗,跟功能不沾边
0 请登录后投票
   发表时间:2011-03-04  
Collection<String> con = new ArrayList<String>();  
con.add("a");  
con.add("b");  
con.add("c");  
con.remove(0);  
System.out.println(con.size());  

Collection 的 remove的方法不是只能移除一个对象~ 咋可以con.remove(0);这样
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics