黑马程序员技术交流社区

标题: 定义集合 [打印本页]

作者: x378320002    时间: 2013-6-17 17:23
标题: 定义集合
在使用集合时,为什么一般都是用顶层类限定类型呢,比如List<Person> list=new ArrayList<Person>();
为什么一般不用
List<Person> list=new ArrayList<Person>();呢?
这是随意的,还是有什么讲究啊?

作者: x378320002    时间: 2013-6-17 17:23
是为什么不用ArrayList<Person> list=new ArrayList<Person>();
作者: toShareBeauty    时间: 2013-6-17 17:54
用 List<Person> list=new ArrayList<Person>(); 还是用 ArrayList<Person> list=new ArrayList<Person>(); 看需求。看你是否需要使用 ArrayList 特有方法。如果不需要特有方法,用 List 是不是更好一点啊,因为这个类是父类特点少,看代码的人看起来也好理解啊,在继承关系上,越往底层走,类拥有的自身的特点越多。而且类的继承关系不应该设计的太复杂。具体几层可以参考 Collection 框架。Collection 框架的设计就很经典。除了好理解外,也可以实现多态啊。后面如果需求有修改,这个地方是比较容易改动的。
作者: 月时微    时间: 2013-6-17 19:42
简单的说,集合类有list列,set集和map映射 三大类!

Set(集):集合中的对象无排列顺序,并且没有重复的对象.

List(队列):集合中的对象按照索引的顺序排列,可以有重复的对象。

Map(映射):集合中的每一个元素都是一对一对的,包括一个key对象,一个Value对象(一个Key指向一个Value).集合中没有重复的key对象,但是vaulue对象可以重复.

这三个接口下有几个方法

你要用的时候需要import java.util.*; 就行

Set set = new HashSet(); //定义集

调用就是 set.add();什么的各种方法。

Arraylist alist= new Arraylist();//定义列 这个比较常用的 像数组,但不像数组那么局限

HashMap map=new HashMap();//定义映射

参考:http://www.sunxin.org/forum/thread/19837.html?page=1



作者: 姚志远    时间: 2013-6-17 20:02
用张老师的话就是 这样写可以体现我们很牛  你懂  呵呵  
其实这样写 List<Person> list=new ArrayList<Person>();的话程序更易扩展
试想如果你把程序写成这样ArrayList<Person> list=new ArrayList<Person>();也许在未来的某天你想用LinkedList
的话,那整个程序也许都要修改了。总之一句话 程序必须易扩展性
作者: x378320002    时间: 2013-6-17 21:52
姚志远 发表于 2013-6-17 20:02
用张老师的话就是 这样写可以体现我们很牛  你懂  呵呵  
其实这样写 List list=new ArrayList();的话程 ...

能具体解释一下这里是怎么实现的容易扩展的么。我就是看不出来这里比直接用ArrayList有什么地方能更容易扩展了
作者: 姚志远    时间: 2013-6-18 01:19
x378320002 发表于 2013-6-17 21:52
能具体解释一下这里是怎么实现的容易扩展的么。我就是看不出来这里比直接用ArrayList有什么地方能更容易 ...

个人观点:如果程序需要时把 List list=new ArrayList();改为 List list=new LinkedList();时
我们只需要该具体的实现就行了这样不是很易扩展吗?如果是这样的话 ArrayList list=new ArrayList();
那不是两部分都要改了 ,你知道的有时可是牵一发而动全身啊。
作者: 不破大地    时间: 2013-6-18 08:31
如果你的需求只针对一种类型的集合,则直接调用你的目的集合,如需Arraylist,就直接调用ArrayList集合的引用,如需linkList就
调用linkList集合的引用。
ArrayList是List的子集,如果你的需求要使用多个集合,则调用父类引用List,这样可以利用多态的好处,便于修改,提高扩展性

作者: 孙百鑫    时间: 2013-6-22 02:00
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




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