最近看Java的集合框架,但有几点令我很疑惑。如:Collection<String> col = new ArrayList<String>();
List<String> list = new ArrayList<String>();
ArrayList<String> arrList = new ArrayList<String>();
我不明白为什么要用前面两种定义的方法,见笑了!
List<String> list = new ArrayList<String>();
ArrayList<String> arrList = new ArrayList<String>();
我不明白为什么要用前面两种定义的方法,见笑了!
解决方案 »
- 遇到了一个非常奇怪的问题
- 多线程问题
- Java 里能判断盘符吗?
- 用JAVA画scatter图的问题
- 如何将网络文件读入char[]???
- 一个应该还算基础的java2D问题,请大家来帮忙
- 求助?如何在java程序中播放声音?
- 虽然没分了,但是恳请大家帮帮忙!!!谢谢!!inputstream是结尾一定有-1吗?我怎么才能让我的这段函数返回,紧急求助!!!
- JTable中的JCheckBox状态无法改变,也无法选中:下面是我的源代码,请热心的人帮助,自己查资料什么的弄了好久了,先谢了
- CreateProcess: Taskkill\IM WINWORD.EXE error=2
- java for循环问题
- 有关线程执行的顺序
List<String> list = new ArrayList<String>();这种写法表示后面只能用List接口里的方法,而不能使用ArrayList中的方法,一旦我需要改变实现,我只需改这一句就可以了List<String> list = new CopyOnWriteA。。
这样写可以改变Collection的实现类。
如果不能保证,那就需要看你想要什么如果要一个列表,就用第二种。
A调用了B的create方法来创建集合对象。
其实,对于A来讲,没有必要关心B将建的结合对象,到底是ArrayList还是LinkedList或者是其他的什么集合。
这样,create方法的返回值就可以直接写成Collection了。有什么好处?
有一天,某人写了一个C类。
C调用了A的某些方法,针对B所创建的集合进行插入删除操作。并且这些操作非常密集。
严重影响了程序的效率。这时,你发现,原来B创建的集合对象是ArrayList。
如果面向接口编程,我们只需要更改B的create方法中,new ArrayList替换成new LinkedList,其他不变即可。
如果没有面向接口编程,我们要该A和B的相关方法。如果C也被牵扯进来,那还要该C的代码。当然了,这只是一个例子而已,未必现实真是这样。并且,面向接口编程,并不只是这一点好处。其他的优点,网上可以查到很多。呵呵。
完全没必要纠结什么接口不接口的。关键看具体环境咯。