Map<String,String> map1=new HashMap<String,String>();
HashMap<String,String> map2=new HashMap<String,String>();2者有什么区别?哪种定义更好?

解决方案 »

  1.   

    小程序无所谓大点的项目该用第一种,除非你要用到HashMap中独有的方法
      

  2.   

    第一种好些
    java倡导面向接口编程,集合很多都是定义一个父接口,然后不同的子类去实现它,这种做法的好处是便于以后的扩展,耦合性要低。
    当然只针对lz提出的这个问题,是没什么区别,都是hashmap,hashmap本身已经实现了map接口,关键点是如果以后自己设计应用的时候,可不可以这样做,像jdk的代码设计一样,更灵活。
      

  3.   

    肯定有区别1.灵活性 定义为Map之后更灵活 今后才有可能在需要的时候替换为HashMap之外的其它实现如TreeMap等,同时如Joshua Bloch等大师也倡导面向接口编程 code to interfaces
    2.有得必有失,第一种的tradeoff就是无法调用HashMap特有的方法,也就是存在于Map接口中所定义的方法之外的HashMap自己的方法,当然同时也是HashMap未override的方法
      

  4.   

    Map<String,String> map1=new HashMap<String,String>();
    这是父类的引用指向子类,是多态;java倡导面向接口编程,集合很多都是定义一个父接口,然后不同的子类去实现它,这种做法的好处是便于以后的扩展,耦合性要低。
      

  5.   

    第一种的tradeoff就是无法调用HashMap特有的方法是吗?应该可以调用HashMap的特有方法吧
      

  6.   


        人 张三 = new 男人()的问题,new出来的的确是男人,但是别人去用的时候,只能当人去用,虽然你真的是男人!
    那么张三能干的事,也仅仅是人能干的,而男人超越人的行为,是无法直接调用的,除非,你给强制转化下,但万一张三是女人呢?
    你当然知道张三肯定是男人,但是别人,未必知道!
      

  7.   

    这就是利用多肽,实现面向接口编程。变量的类型使用父类,然后指向子类,这样的话,如果实现变了,比如后来实现更改了,编程map的另一个子类LinkedHashMap,只在声明处更改即可。Map<String,String> map1=new LinkedHashMap<String,String>();
    当然这通过依赖注入来实现是最好的方式
      

  8.   


    有区别
    hashmap  实现了 map