Java 映射和哈希映射

Java 映射和哈希映射,java,Java,有什么区别?请看下面 HashMap<Integer, String> hashMap = new HashMap<Integer, String>(); HashMap HashMap=newhashmap(); 及 Map hashMap=newhashmap差异在于变量hashMap。如果您这样创建它: HashMap hashMap = new HashMap(); Map hashMap = new HashMap(); 您将能够使用HashMap的所有

有什么区别?请看下面

HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
HashMap HashMap=newhashmap();


Map hashMap=newhashmap差异在于变量
hashMap
。如果您这样创建它:

HashMap hashMap = new HashMap();
Map hashMap = new HashMap();
您将能够使用HashMap的所有方法

如果您这样创建它:

HashMap hashMap = new HashMap();
Map hashMap = new HashMap();
然后您将仅限于
Map
界面的方法

区别在于
HashMap
Map
接口的实现。您可以说,在大多数情况下,最好使用
Map
接口,因为通常您不需要了解实现的详细信息通过这种方式,您可以立即交换实现

这一点源于我们的总方针

请注意:

如果适用,您应该使用泛型。

A
Map
是一个接口,
HashMap
是一个实现接口的类

我总是喜欢第二个选项,除非您特别想要
HashMap
的字符

使用后一种方法,可以轻松地将
HashMap
切换到
Map
的另一个实现

另一个针对接口编码的示例 以
List
vs
ArrayList
方法为例:

  • 如果将其定义为
    ArrayList list=new-ArrayList()
    ,则无法轻松将其更改为
    LinkedList()
    ,因为
    ArrayList list=new-LinkedList()
    不会编译
  • 但是,如果将其声明为
    List List=new ArrayList()
    ,则可以随时将其切换到
    LinkedList()
在方法中针对接口进行编码的示例 假设您有一个接受
列表的方法,那么您应该怎么做

  • 使其成为
    无效方法(ArrayList列表)
  • 或者将其设置为
    void方法(列表)
  • 现在,如果您不关心列表的类型,而只关心
    列表
    界面中可用的操作,则通常希望它是一个
    列表


    然而,在某些情况下,您可能确实希望强制执行恒定的访问时间,如果是这种情况,那么只让您的方法接受
    ArrayList
    ,可能非常有意义,因为该实现提供了恒定的访问时间。

    据我从javadoc中看到的,HashMap没有添加任何新方法,所以对于这两类人来说没有区别


    根据一般原则,只要可能,最好使用接口而不是类。

    @反对者:想解释一下吗?