Java 将Map和HashMap用作声明类型的区别

Java 将Map和HashMap用作声明类型的区别,java,map,hashmap,Java,Map,Hashmap,以下两种声明的区别是什么: HashMap<Character, Character> map = new HashMap<Character, Character>(); Map<Character, Character> map = new HashMap<Character, Character>(); 第二个版本是首选的,因为如果您想稍后编写代码以将map更改为不同类型的map,则需要使用第二个版本。但这确实是个人偏好的问题。根本没有区

以下两种声明的区别是什么:

HashMap<Character, Character> map = new HashMap<Character, Character>();

Map<Character, Character> map = new HashMap<Character, Character>();

第二个版本是首选的,因为如果您想稍后编写代码以将
map
更改为不同类型的
map
,则需要使用第二个版本。但这确实是个人偏好的问题。

根本没有区别。更多的是关于界面。但是,使用
映射
有一个优点,即您可以将对象更改为不同类型的
映射
,而不会破坏使用它的代码的契约

HashMap
Map
的一个实现,它是Java集合框架的一部分。如果您决定使用
HashMap
,而另一方希望得到一些不同的东西,比如
LinkedHashMap
(保留迭代顺序),那么您必须改变情况。这是一张图表(由克里克提供)

如果您关心性能,还可以考虑计算时间复杂性。这里有一张小桌子,可以用。选择正确的东西是一个设计和需求的问题,即你想做什么。它因项目而异


从面向对象的角度来看,在编译过程中, 该方法是绑定引用类类型, 所以HashMap map=newhashmap(); 您可以使用hashMap方法,包括实现映射和扩展映射。但是 Map Map=newhashmap();
您只能使用map中声明的方法。不能使用hashMap方法。

第二个问题的答案是“是”,原因如下所述。第一个问题的答案是肯定的,因为它在第二个问题中强制执行正确的行为(您不能编写接受
HashMap
然后尝试传递
Map
的方法,编译器不会允许您这样做。)
public void method(Map map){

}