java 中 collection 和set ,list
ArrayList C =new Arraylist();在实际应用的区别在哪? 展开
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
collection c=new ArrayList():
ArrayList C =new Arraylist();
写法一般使用上,没区别,但是想直接使用c变量来执行ArrayList的方法,就不行。
这样的好处是通用、方便有的方法作重载。
2.collection和List都是接口,所以方法都是抽象方法,没有方法体的,所以方法的实现都在Arraylist里面.
3.至于实际应用的区别按照业务需求的不同而不同,不能一概而论.例如,你做了一个项目要用到List集合(ArrayList C =new Arraylist()),但做到一半的时候发现数据里不能出现重复元素,用set比较合适,这时候你改起来就非常麻烦.因为可能已经涉及到很多类,而且实际开发当中都是好几个人一起开发的,如果别人已经调用的集合,你一改动别人的代码也是跟着改动,如果一开始你是用的就是多态的方式,改动就时候只需改实例化(就是
collection c=new ArrayList():
)就行了其他就不用改动,因为别人拿到的只是接口的实现对象,至于你实现的是List还是set,对调用者来说都没区别,因为他只能用接口中的共有方法,这样就大大减少耦合性,也方面了开发.
对于谁重写谁建议查api,多看看什么都明白了