首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-08-30 
Collection接口的remove和List接口的remove的差别刚看书上一段代码,觉得输出的结果有点奇怪,查看了jdk的ap

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

刚看书上一段代码,觉得输出的结果有点奇怪,查看了jdk的api后,恍然大悟。
代码:

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(0);System.out.println(list.size());


欲知所以然,请查下api。(ps:jdk版本为1.5以上,因为1.5以上才支持泛型和自动装箱)

?

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());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());

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

问题是jdk1.5以后有了装箱机制,传入基本数据类型,也当做Object处理了。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,一个是intpublic 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的问题编译时候就发现了~~~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

谢谢指出,确实是重载,是我弄错了。 18 楼 wangdongjie03 2011-03-02   哪里命名不规范了吗,跟功能不沾边 19 楼 huang5787826 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);这样

热点排行