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
接口,因为通常您不需要了解实现的详细信息,通过这种方式,您可以立即交换实现
这一点源于我们的总方针
请注意:
如果适用,您应该使用泛型。AMap
是一个接口,HashMap
是一个实现接口的类
我总是喜欢第二个选项,除非您特别想要HashMap
的字符
使用后一种方法,可以轻松地将HashMap
切换到Map
的另一个实现
另一个针对接口编码的示例
以List
vsArrayList
方法为例:
- 如果将其定义为
ArrayList list=new-ArrayList()
,则无法轻松将其更改为LinkedList()
,因为ArrayList list=new-LinkedList()
不会编译
- 但是,如果将其声明为
List List=new ArrayList()
,则可以随时将其切换到LinkedList()
在方法中针对接口进行编码的示例
假设您有一个接受列表的方法,那么您应该怎么做
使其成为无效方法(ArrayList列表)
李>
或者将其设置为void方法(列表)
现在,如果您不关心列表的类型,而只关心列表
界面中可用的操作,则通常希望它是一个列表
然而,在某些情况下,您可能确实希望强制执行恒定的访问时间,如果是这种情况,那么只让您的方法接受ArrayList
,可能非常有意义,因为该实现提供了恒定的访问时间。据我从javadoc中看到的,HashMap没有添加任何新方法,所以对于这两类人来说没有区别
根据一般原则,只要可能,最好使用接口而不是类。@反对者:想解释一下吗?