A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© biebie 中级黑马   /  2014-12-12 16:40  /  1608 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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>();

6 个回复

倒序浏览
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特有的方法和属性。

评分

参与人数 1黑马币 +2 收起 理由
run_wind + 2 其实我也很疑惑的,这下OK了

查看全部评分

回复 使用道具 举报 2 0
任我行 发表于 2014-12-12 17:23
ArrayList和LinkedList  继承并实现了List
为什么要用 List list = new ArrayList() ,而不用 ArrayList ali ...

多谢了!
回复 使用道具 举报
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>();
创建了一个引用,指向了两个对象。

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

点评

说的非常在理!  发表于 2014-12-12 22:00
回复 使用道具 举报 1 0
我是来学习的。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马