以下两个声明声明之间的区别是什么:
HashMap<Character, Character> map = new HashMap<Character, Character>();
Map<Character, Character> map = new HashMap<Character, Character>();
在这种特殊情况下使用界面Map
而不是HashMap
的任何好处?
在下面的例子中,Map肯定更好,因为该方法可以接受不同类型的地图吗?(如果是这样的话)
public void method(Map map){
}
答案 0 :(得分:6)
没有潜在的差异。它更多的是关于界面。使用Map
的优点是,您可以将对象更改为Map
的不同类型,而不会违反使用它的代码合同。
HashMap
是Map
的实现,它是Java Collections Framework的一部分。如果你决定使用HashMap
然后另一方希望有不同的东西,比如LinkedHashMap
(保留迭代顺序),那么你必须改变一些事情。这是一张图表(由ProgramCreek提供)。
如果你关心性能,还有其他一些事情,比如计算时间的复杂性。这是一个有用的小桌子。选择正确的东西是设计和需求的问题,即你想做什么。它因项目而异。
答案 1 :(得分:5)
第二个版本是首选版本,因为如果您想稍后编写代码以将map
更改为其他类型的Map
,则需要使用第二个版本。但这确实是个人偏好的问题。
答案 2 :(得分:0)
从面向对象的角度来看,在编译期间, 该方法是绑定引用类类型, 所以HashMap map = new HashMap(); 你可以使用我们的hashMap方法,包括实现映射和扩展。但是, Map map = new HashMap(); 您只能使用map中声明的方法。不能使用hashMap方法。