黑马程序员技术交流社区

标题: list的声明问题 [打印本页]

作者: biebie    时间: 2014-12-12 16:40
标题: list的声明问题
本帖最后由 biebie 于 2014-12-12 16:41 编辑

List<String> list=new ArrayList<String>();为甚麼要声明为List 而不是ArrayList<String>?
查了一些资料。是这么说的:
有时候我们不一定想用 ArrayList ,而要用 LinkedList ,这时候直接 list = new LinkedList<String>();就可以了

我想问的如果这样的话就相当于把list这个对象直接转型成LinkedList吗?
那就直接LinkedList <String>list2 = new LinkedList<String>();不就是多创建一个对象的事儿吗?

如下所示,A和B有什么不同呢?
A:
ArrayList<String> list=new ArrayList<String>();
LinkedList <String>list2 = new LinkedList<String>();

B:
List<String> list=new ArrayList<String>();
list = new LinkedList<String>();

作者: 任我行    时间: 2014-12-12 17:23
ArrayList和LinkedList  继承并实现了List
为什么要用 List<String> list = new ArrayList() ,而不用 ArrayList<String> alist = new ArrayList()呢?
问题就在于List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 LinkedList或者Vector等等,这时你只要改变这一行就行了:
List<String> list  = new LinkedList(); 其它使用了list地方的代码根本不需要改动。
假设你开始用 ArrayList<String> alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。
作者: biebie    时间: 2014-12-12 20:00
任我行 发表于 2014-12-12 17:23
ArrayList和LinkedList  继承并实现了List
为什么要用 List list = new ArrayList() ,而不用 ArrayList ali ...

多谢了!
作者: Honelyboy    时间: 2014-12-12 21:26
B是多态形式。
作者: 姿_`态    时间: 2014-12-12 21:54
A:
ArrayList<String> list=new ArrayList<String>();
LinkedList <String>list2 = new LinkedList<String>();

创建了两个引用,指向了两个对象。

B:
List<String> list=new ArrayList<String>();
list = new LinkedList<String>();
创建了一个引用,指向了两个对象。

这里说一下为什么一个引用可以指向两个对象,这也就是多态机制,list接口,他的实现子类有多种拓展功能,但他们都是实现了list接口的对象,所以一个引用可以指向多个对象。为什么一个引用指向两个或多个对象,而不是一个引用指向一个对象。其实很多需求只能用一个list引用,当内存有限,或者线程同步,不能有更多的集合对象,使得List总的接口来管理对象。那么B的优点就不言而喻了。


作者: wzl963358694    时间: 2014-12-12 22:05
我是来学习的。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2