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);这样