当前位置: 代码迷 >> J2SE >> Map 地图 = new HashMap();HashMap 地图 = new HashMap();那种写法更好
  详细解决方案

Map 地图 = new HashMap();HashMap 地图 = new HashMap();那种写法更好

热度:660   发布时间:2016-04-24 00:25:25.0
Map map = new HashMap();HashMap map = new HashMap();那种写法更好?
最近看了些技术类文章,都说前者那种面象接口的写法更好,藕合性更底之类的,
但具体好体现在哪里或为什么更好还是一口雾水,还有对藕合性这个慨念感觉理解得了也不怎么深刻,请大家来讨论下吧
还有不知道各位平时在项目中常用那种啊?

------解决方案--------------------
前者好,因为如果将来你可能会发现使用HashMap不满足要求,例如HashMap不是线程安全的、HashMap对Put到里面的Key没有排序等。

如果使用后者则可能需要修改大量的地方
------解决方案--------------------
都只见过前面一种的 没有见过后面的 
我相信总是有原因的
------解决方案--------------------
其实 都一样 就看你是怎么用的 !!
map是接口,不能用new出对象 
hashmap是继承map接口的实现类,可以new出对象
实现map接口的类都城有如下属性,都是把其中数据做为key,value来放,即是我们说的键值对,你这样掌握就可以了
------解决方案--------------------
Map map = new HashMap();比HashMap map = new HashMap();写法更好点
这是多态的一种体现,也是封装性的一种体现,
第一种可以改为Map map = new HashTable();后面的代码就不需要改变的,这样代码的变动就小了,便于开发和维护。
如果用HashMap map = new HashMap();就会出现在查找程序中出现的每个地方来修改,这样会加大开发和维护的成本。
在开发时我们尽量让类或者对象封装好,尽量实现多态,这样便于开发和维护。
------解决方案--------------------
1.test(Collection c){
}
//接受任何Collection 实现类的对象,可以传入ArrayList对象,也可以传入Vector对象……

2.test(ArrayList list){
}
//只接受ArrayList对象

如果用方法2,当想把ArrayList换成Vector时,要改变test(ArrayList list)方法
如果用方法1就不需要做任何改变

------解决方案--------------------
HashMap不是线程安全的、HashMap对Put到里面的Key没有排序

这话是对的。。。

要排序可用LIST
------解决方案--------------------
藕合性就是要分清各个模块的层次关系,使之他们之间的能独立化,不至于互相影响的够大,就像是spring,是属于轻量级的,就是类和类或者模块之间没有依赖关系。

Map map = new HashMap();这个其实你定义的是一个接口,你调用这个接口来实现你要完成的动作,这样别人直接用你这个接口就可以了,而不用关心你具体是怎么实现这个接口的,假如以后有变动的话,你不用在去管这个接口,只去改下你的实现类就可以了,方便维护,隔离性强。

HashMap map = new HashMap();而这个 你定义的就是一个实现类,你把这个实现类给别人用,在出现问题和改动的话,那么程序就无法运行,凡是用到这个类的地方都要修改,维护起来很麻烦,而上面的接口,你只需要改你实现这个接口的实现类就可以了。这样就是你说的降低了藕合性。明白了吧^_^
  相关解决方案