java 中 collection 和set ,list

这个Collection是set和list的父接口,他们是怎么样的关系呢,那个add方法是collection中的的?collection是抽象类,那这个add()岂不是... 这个 Collection是set和list的父接口,他们是怎么样的关系呢,那个 add方法是collection中的的?collection是抽象类,那这个add()岂不是在ArrayList实现的时候被重写?collection c=new ArrayList():
ArrayList C =new Arraylist();在实际应用的区别在哪?
展开
 我来答
赤壁赋白
2013-08-31 · TA获得超过988个赞
知道小有建树答主
回答量:338
采纳率:100%
帮助的人:233万
展开全部

add方法是collection,但是set和list在实现collection接口时都有重写该方法,set和list的add方法不同就是最好的证明。

api中有写到“如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。更确切地讲,如果此 set 没有包含满足
(e==null ? e2==null : e.equals(e2)) 的元素 e2,则向该 set 中添加指定的元素
e。如果此 set 已经包含该元素,则该调用不改变此 set 并返回 false。结合构造方法上的限制,这就可以确保 set
永远不包含重复的元素。 ”  简单来说就是set中不会重复添加相同的元素,而list却可以。collection是个接口,并不是抽象类,而arraylist这个非抽象类实现了collection这个接口,肯定是要重写接口中的方法,所以add方法肯定是被重写的。对于最后一个问题,两者的区别再来看2张图片。


显然collection c=new ArrayList():中的c对象能够使用的方法只是来自Collection中所有的,对于arraylist这个类所特有的方法它是不具备的,也是不可以使用的。所以ArrayList C =new Arraylist()中的C对象要明显多了许多方法。一般我们都采用collection c=new ArrayList():这种写法是因为面向接口的编程对于日后的更改会更方便,举个例子,如果以后把collection c=new ArrayList():改成=new HashSet();后面的代码是不需要做任何变动的,因为c所用的方法是类从collection继承的,而如果ArrayList C =new Arraylist()改成HashSet C= new HashSet();的话,后面代码可能要做很大的变动,毕竟ArrayList类中存在的方法HashSet类中不一定有。

//楼主看我这么辛苦作答,要是觉得大体满意就采纳呗。

匿名用户
2013-08-31
展开全部
add是要重写的

collection c=new ArrayList():
ArrayList C =new Arraylist();
写法一般使用上,没区别,但是想直接使用c变量来执行ArrayList的方法,就不行。
这样的好处是通用、方便有的方法作重载。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
中华名女支
2013-08-31 · TA获得超过292个赞
知道答主
回答量:56
采纳率:100%
帮助的人:46.8万
展开全部
1.collection是接口里面的方法都是抽象方法的,但接口跟抽象类不一样的.(LZ不清楚可追问,我补充)
2.collection和List都是接口,所以方法都是抽象方法,没有方法体的,所以方法的实现都在Arraylist里面.

3.至于实际应用的区别按照业务需求的不同而不同,不能一概而论.例如,你做了一个项目要用到List集合(ArrayList C =new Arraylist()),但做到一半的时候发现数据里不能出现重复元素,用set比较合适,这时候你改起来就非常麻烦.因为可能已经涉及到很多类,而且实际开发当中都是好几个人一起开发的,如果别人已经调用的集合,你一改动别人的代码也是跟着改动,如果一开始你是用的就是多态的方式,改动就时候只需改实例化(就是
collection c=new ArrayList():
)就行了其他就不用改动,因为别人拿到的只是接口的实现对象,至于你实现的是List还是set,对调用者来说都没区别,因为他只能用接口中的共有方法,这样就大大减少耦合性,也方面了开发.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱炼金
2013-08-31 · 超过11用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:19.2万
展开全部
这里有一个非常重要的概念叫做面向接口编程http://baike.baidu.com/link?url=Uh-UEl_4gv2oi0Uc1CmRokLDPSyvQMrqzuvfwwb7s5K7zNj962b4ng9eSg4yc05l2z_GvW1V1LrpKfL6gEyAnq
对于谁重写谁建议查api,多看看什么都明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式