Map map = new HashMap();HashMap map = new HashMap();那种写法更好?

来源:互联网 发布:雪平锅优缺点 知乎 编辑:程序博客网 时间:2024/05/29 10:54

Map map = new HashMap();HashMap map = new HashMap();那种写法更好? [问题点数:100分,结帖人xzy88]

 收藏
楼主发表于: 2009-06-19 09:35:17
最近看了些技术类文章,都说前者那种面象接口的写法更好,藕合性更底之类的,
但具体好体现在哪里或为什么更好还是一口雾水,还有对藕合性这个慨念感觉理解得了也不怎么深刻,请大家来讨论下吧
还有不知道各位平时在项目中常用那种啊?
  • <iframe id="iframeu1636200_0" src="http://pos.baidu.com/rcjm?rdid=1636200&amp;dc=2&amp;di=u1636200&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=742x191&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1459128154568&amp;ti=Map%20map%20%3D%20new%20HashMap()%3BHashMap%20map%20%3D%20new%20HashMap()%3B%E9%82%A3%E7%A7%8D%E5%86%99%E6%B3%95%E6%9B%B4%E5%A5%BD%3F-&amp;ari=1&amp;dbv=2&amp;drs=3&amp;pcs=956x500&amp;pss=960x6318&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1459128155&amp;ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F310092881&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D94_au7PP5C850lAOSyntKmcbGnijsU_o7-XY7Ol6sMiTHaCOKKJopjzO2cKfq6N3%26wd%3D%26eqid%3De92d58f60001bb790000000556f8871d&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=6&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1459128156&amp;qn=1d4f5e20c0bb5b0e&amp;tt=1459128154419.1289.1479.1480" width="200" height="22" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="box-sizing: content-box; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>
     
  • <iframe id="iframeu1636201_0" src="http://pos.baidu.com/rcjm?rdid=1636201&amp;dc=2&amp;di=u1636201&amp;dri=0&amp;dis=0&amp;dai=3&amp;ps=742x445&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1459128154568&amp;ti=Map%20map%20%3D%20new%20HashMap()%3BHashMap%20map%20%3D%20new%20HashMap()%3B%E9%82%A3%E7%A7%8D%E5%86%99%E6%B3%95%E6%9B%B4%E5%A5%BD%3F-&amp;ari=1&amp;dbv=2&amp;drs=3&amp;pcs=956x500&amp;pss=960x6318&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1459128155&amp;ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F310092881&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D94_au7PP5C850lAOSyntKmcbGnijsU_o7-XY7Ol6sMiTHaCOKKJopjzO2cKfq6N3%26wd%3D%26eqid%3De92d58f60001bb790000000556f8871d&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=6&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1459128156&amp;qn=0278281023bbe4d4&amp;tt=1459128154419.1290.1517.1518" width="200" height="22" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="box-sizing: content-box; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>
     
  • <iframe id="iframeu1636204_0" src="http://pos.baidu.com/rcjm?rdid=1636204&amp;dc=2&amp;di=u1636204&amp;dri=0&amp;dis=0&amp;dai=4&amp;ps=742x699&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1459128154568&amp;ti=Map%20map%20%3D%20new%20HashMap()%3BHashMap%20map%20%3D%20new%20HashMap()%3B%E9%82%A3%E7%A7%8D%E5%86%99%E6%B3%95%E6%9B%B4%E5%A5%BD%3F-&amp;ari=1&amp;dbv=2&amp;drs=3&amp;pcs=956x500&amp;pss=960x6318&amp;cfv=0&amp;cpl=4&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1459128155&amp;ltu=http%3A%2F%2Fbbs.csdn.net%2Ftopics%2F310092881&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D94_au7PP5C850lAOSyntKmcbGnijsU_o7-XY7Ol6sMiTHaCOKKJopjzO2cKfq6N3%26wd%3D%26eqid%3De92d58f60001bb790000000556f8871d&amp;ecd=1&amp;psr=1366x768&amp;par=1366x728&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=6&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1459128156&amp;qn=d42578272d447d9a&amp;tt=1459128154419.1292.1558.1559" width="200" height="22" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="box-sizing: content-box; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    回复次数:19
    #1 得分:50回复于: 2009-06-19 09:40:43
    前者好,因为如果将来你可能会发现使用HashMap不满足要求,例如HashMap不是线程安全的、HashMap对Put到里面的Key没有排序等。

    如果使用后者则可能需要修改大量的地方
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #2 得分:1回复于: 2009-06-19 09:43:44
    都只见过前面一种的 没有见过后面的 
    我相信总是有原因的 
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #3 得分:1回复于: 2009-06-19 09:46:10
    其实 都一样  就看你是怎么用的 !!
    map是接口,不能用new出对象 
    hashmap是继承map接口的实现类,可以new出对象
    实现map接口的类都城有如下属性,都是把其中数据做为key,value来放,即是我们说的键值对,你这样掌握就可以了
    对我有用[1] 丢个板砖[0] 引用 | 举报 | 管理
    #4 得分:0回复于: 2009-06-19 09:48:54
    引用 1 楼 ChDw 的回复:
    前者好,因为如果将来你可能会发现使用HashMap不满足要求,例如HashMap不是线程安全的、HashMap对Put到里面的Key没有排序等。 

    如果使用后者则可能需要修改大量的地方

    你说的这点我认同,那其它的呢,如藕合性等有没关系啊
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #5 得分:20回复于: 2009-06-19 09:49:20
    Map map = new HashMap();比HashMap map = new HashMap();写法更好点
    这是多态的一种体现,也是封装性的一种体现,
    第一种可以改为Map map = new HashTable();后面的代码就不需要改变的,这样代码的变动就小了,便于开发和维护。
    如果用HashMap map = new HashMap();就会出现在查找程序中出现的每个地方来修改,这样会加大开发和维护的成本。
    在开发时我们尽量让类或者对象封装好,尽量实现多态,这样便于开发和维护。
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #6 得分:0回复于: 2009-06-19 09:52:41
    引用 3 楼 pc144818 的回复:
    其实 都一样  就看你是怎么用的 !! 
    map是接口,不能用new出对象 
    hashmap是继承map接口的实现类,可以new出对象 
    实现map接口的类都城有如下属性,都是把其中数据做为key,value来放,即是我们说的键值对,你这样掌握就可以了

    当然功能上是没区别的,这个我当然知道,除了前者思想比较好之外(面向接口的编程思想),我是想知道,有没其它方面的优点呢?
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #7 得分:5回复于: 2009-06-19 09:57:38
    1.test(Collection c){       
    }
    //接受任何Collection 实现类的对象,可以传入ArrayList对象,也可以传入Vector对象……

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

    如果用方法2,当想把ArrayList换成Vector时,要改变test(ArrayList list)方法
    如果用方法1就不需要做任何改变
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #8 得分:1回复于: 2009-06-19 10:00:29
    HashMap不是线程安全的、HashMap对Put到里面的Key没有排序

    这话是对的。。。

    要排序可用LIST
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #9 得分:22回复于: 2009-06-19 10:01:51
    藕合性就是要分清各个模块的层次关系,使之他们之间的能独立化,不至于互相影响的够大,就像是spring,是属于轻量级的,就是类和类或者模块之间没有依赖关系。

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

    HashMap map = new HashMap();而这个 你定义的就是一个实现类,你把这个实现类给别人用,在出现问题和改动的话,那么程序就无法运行,凡是用到这个类的地方都要修改,维护起来很麻烦,而上面的接口,你只需要改你实现这个接口的实现类就可以了。这样就是你说的降低了藕合性。明白了吧^_^
    对我有用[4] 丢个板砖[0] 引用 | 举报 | 管理
    #10 得分:0回复于: 2009-06-19 10:04:04
    顶一下5楼的 确实平时都是用的第一种
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #11 得分:0回复于: 2009-06-19 10:12:46
    一般来说前者好,可扩展性强
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #12 得分:0回复于: 2009-06-19 10:14:16
    引用 1 楼 ChDw 的回复:
    前者好,因为如果将来你可能会发现使用HashMap不满足要求,例如HashMap不是线程安全的、HashMap对Put到里面的Key没有排序等。 

    如果使用后者则可能需要修改大量的地方

    一语中的!同时也回答了低耦合的一个重要作用,程序耦合度越底,需要修改的面越小
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #13 得分:0回复于: 2009-06-19 10:28:01
    引用 5 楼 johnston678 的回复:
    Map map = new HashMap();比HashMap map = new HashMap();写法更好点 
    这是多态的一种体现,也是封装性的一种体现, 
    第一种可以改为Map map = new HashTable();后面的代码就不需要改变的,这样代码的变动就小了,便于开发和维护。 
    如果用HashMap map = new HashMap();就会出现在查找程序中出现的每个地方来修改,这样会加大开发和维护的成本。 
    在开发时我们尽量让类或者对象封装好,尽量实现多态,这样便于开发和维护。

    正解
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #14 得分:0回复于: 2009-06-19 10:32:27
    up!
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #15 得分:0回复于: 2009-06-19 10:33:39
    前者好,依赖性低!
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #16 得分:0回复于: 2010-11-11 15:50:33
    前者好,!
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #18 得分:0回复于: 2011-02-21 10:48:17
    最好能举个例子 还是理解的不够透彻
    对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
    #19 得分:0回复于: 2012-07-29 10:52:01
    其实用前面一种也有个短板 , 你只能用map容器的方法,而不能用具体实现类的独有方法。
    所以用哪种 你得具体分析。  
    0 0