`
zhangyou1010
  • 浏览: 303795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

刚看书上一段代码,觉得输出的结果有点奇怪,查看了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以上才支持泛型和自动装箱)

 

分享到:
评论
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);这样
18 楼 wangdongjie03 2011-03-02  
哪里命名不规范了吗,跟功能不沾边
17 楼 zhangyou1010 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


谢谢指出,确实是重载,是我弄错了。
16 楼 gch_h 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');
15 楼 sd_zyl 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的问题编译时候就发现了~~~
14 楼 clayton0 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
13 楼 zhangyou1010 2011-02-28  
yangfuchao418 写道
一个是在集合中删除指定的对象(传具体的对象);一个是在集合中删除指定位置的元素(传下标)。

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


问题是jdk1.5以后有了装箱机制,传入基本数据类型,也当做Object处理了。
12 楼 onlylau 2011-02-28  
原来Collection类中只有remove(E e),而List中除了有继承来的remove(E e);还有自己重载实现的remove(int index);方法

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

谢谢LZ分享,自己都把这个区别给忘了
11 楼 yangfuchao418 2011-02-28  
一个是在集合中删除指定的对象(传具体的对象);一个是在集合中删除指定位置的元素(传下标)。

呵呵,如果在智能编程工具中,如eclipse中,最好的办法,其实看传的参数结构就知道不同了。根本不用查api
10 楼 sswh 2011-02-28  
E remove(int index)
          移除列表中指定位置的元素(可选操作)。

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

这种情况真的是编程中的陷阱。。
9 楼 Reset 2011-02-28  
List<String> con = new ArrayList<String>();
8 楼 zhangyou1010 2011-02-28  
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());


这里没涉及到重载。是接口里的方法规定不一样而已。
7 楼 hotapple 2011-02-27  
Collection:
remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
6 楼 晨星★~雨泪 2011-02-27  
yangyi 写道
命名不规范的例证

非也非也
5 楼 chenchao051 2011-02-27  
liubey 写道
细节决定成败~


确实是这样。遗憾的是,这样的情况还不是少数。
4 楼 webee 2011-02-27  
你呀肯定不看接口编程的,这是两个不同的重载方法!
	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());
3 楼 yangyi 2011-02-26  
命名不规范的例证
2 楼 liubey 2011-02-26  
细节决定成败~
1 楼 houfeng0923 2011-02-26  
3
2
对比才知道呀。呵呵

相关推荐

    Java入门第三季Collection 接口 & List 接口简介,学生选课(增、删、改、查)

    在Java编程语言中,集合框架是处理对象数组的重要工具,其中`Collection`接口和`List`接口是核心组件。本教程将重点介绍这两个接口以及如何使用它们来实现学生选课系统中的“增、删、改、查”操作。 首先,`...

    Collection List Set Map 区别记忆

    其中,`Collection`、`List`、`Set`和`Map`是四大基本接口,它们各自代表了一种特定的数据结构,有着不同的特性和用途。下面我们将详细探讨这些接口的区别及其相关知识点。 首先,`Collection`是所有集合类的顶级...

    Java集合框架Collection接口.pdf

    ### Java集合框架Collection接口详解 #### 一、Java集合框架简介 Java集合框架(Java Collection ...此外,了解`Collection`接口的不同实现(如`List`和`Set`)可以帮助开发者根据实际需求选择最合适的集合类型。

    11.集合框架001-Collection接口1-3

    3. Collection接口的子接口,如Set接口(不允许重复元素)和List接口(元素有序并可重复)。 接下来,我们转向“2-集合框架002-List接口-1080P 高清-AVC.mp4”。List接口是Collection的一个子接口,它增加了索引...

    Java集合Collection、List、Set、Map使用详解

    Collection接口定义了许多通用方法,如`add()`, `remove()`, `contains()`, `size()`等,这些方法在List和Set中都有所实现。 1.2.2 迭代器 迭代器(Iterator)是访问集合元素的主要方式,通过`iterator()`方法获取...

    Java集合Collection、List、Set、Map使用详解.pdf

    Collection接口是Java集合框架的根接口,定义了基本的集合操作,而List接口和Set接口继承自Collection接口,提供了有序和无序的集合操作。Map接口提供了键值对的存储和操作。 Java集合框架是Java语言中最基本也是最...

    认识类集、Collection接口

    本文将深入探讨`Collection`接口,它是所有类集的基础,以及与之相关的Java类和接口。 `Collection`接口位于`java.util`包下,是Java集合框架的顶级接口。它定义了存储、操作和遍历对象的基本方法。`Collection`...

    11.集合框架001-Collection接口4-5

    10. **Set与List接口**:虽然都属于Collection接口,但Set接口不允许重复元素,而List接口允许重复元素并保持元素顺序。Set接口的典型实现有HashSet和TreeSet,List接口的常见实现有ArrayList和LinkedList。 理解并...

    List,set,Map 的用法和区别

    除了具有 Collection 接口必备的 iterator() 方法外,List 还提供一个 listIterator() 方法,返回一个 ListIterator 接口,和标准的 Iterator 接口相比,ListIterator 多了一些 add() 之类的方法,允许添加、删除、...

    11.集合框架001-Collection接口10-12

    Collection接口定义了一些基本的操作方法,如add()(添加元素)、remove()(移除元素)和size()(获取元素数量)。它还有其他子接口,如List和Set,分别代表有序可重复和无序不重复的元素集合。 **链表(LinkedList...

    Collection、Map、List、Set、Iterator

    ### Collection、Map、List、Set、...以上就是关于 `Collection`、`Map`、`List`、`Set` 和 `Iterator` 的详细解析,这些概念和类是 Java 编程中非常基础且重要的部分,掌握它们有助于更好地理解和使用 Java 集合框架。

    Java软件开发实战 Java基础与案例开发详解 11-2 Collection接口 共9页.pdf

    通过上述内容的学习,我们可以了解到`Collection`接口及其相关子接口(如`List`和`Set`)在Java集合框架中的重要作用。同时,我们也学习了如何使用这些接口来创建不同类型的集合,并掌握了如何通过迭代器来遍历集合...

    11.集合框架001-Collection接口13-16

    所有的集合类,无论是List、Set还是Queue,都直接或间接地继承自Collection接口。Collection接口定义了基本的集合操作,如添加元素(add),删除元素(remove),检查元素是否存在(contains)等。此外,它还提供了遍历...

    11.集合框架001-Collection接口6-9

    `Collection`接口也是`List`、`Set`和`Queue`等其他接口的超接口。 `ArrayList`是基于数组实现的列表,属于`List`接口的实现。在"9-集合框架009-ArrayList源码分析-1080P 高清-AVC.mp4"中,你可以了解到`ArrayList`...

    11.集合框架001-Collection接口21-23

    所有其他单值容器,如List、Set和Queue,都直接或间接地继承自Collection接口。 HashMap是Java中基于哈希表实现的Map接口的一个实现,提供快速的插入、查找和删除操作。它的平均时间复杂度为O(1)。在21号章节中,...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    Java集合排序及Java集合类...本文详细解释了Java集合框架的实现原理、Collection、List、Set、Map四个接口的定义和实现原理,以及它们的常用方法。同时,本文还对Java集合框架的设计理念和实现原理进行了详细的解释。

    Java集合:Collection、List、Set、Map使用详解

    本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...

    Implement with Class and Collection a List Collection with a

    标题 "Implement with Class and Collection a List Collection with a" 暗示了我们需要讨论如何使用类(Class)和集合(Collection)来实现一个列表集合,并具备添加(add)和移除(remove)数据元素的功能。...

    Collection集合继承结构图.pdf

    Collection的子接口包括List、Set和Queue,它们各自代表了不同种类的集合类型: - List 接口:有序的集合,可以包含重复的元素。其特点是元素有固定的顺序,可以通过索引来访问。 - Set 接口:不允许包含重复的元素...

Global site tag (gtag.js) - Google Analytics