使用java和最佳用例之间的区别是什么 我无法理解这两个概念可以通过实例解释这两个概念的区别。 What Java Collection should I use?
Map<string> map =new Hashmap<string>();
Hashmap<string> map =new Hashmap<string>();
哪种用法更好。
注意:任何人都可以为我的java集合和数据结构指导我最好的电子书
答案 0 :(得分:3)
例如,一个区别是,如果您希望稍后将map
更改为implements
Map
的其他类型,则在第二个示例中无法执行此操作。< / p>
快速示例:
Map<Type> map = new HashMap<>();
map = new TreeMap<>(); //:)
HashMap<Type> map = new HashMap<>();
map = new TreeMap<>(); //:_(
答案 1 :(得分:0)
使用Map<String> map = new HashMap<String>();
,您使用的是一种简单的依赖注入形式。如果您使用的是HashMap
或TreeMap
,则您的代码无需担心,因为您可以使用其通用界面。稍后如果要更改地图类型,则必须在变量声明中执行此操作。
答案 2 :(得分:0)
Map
是interface
,而HashMap
是Map
的具体实现。
因此,第二个构造将具有HashMap的功能,并且显然已经实现了Map。
但是,如果你将Map
的这个实例传递给以Map
为参数的函数,那么就没有区别了。
答案 3 :(得分:0)
没有真正的最佳做法。
使用界面Map<string> map = new Hashmap<string>();
:
使用具体实施Hashmap<string> map = new Hashmap<string>();
:
在它只是一个POO的问题后,我认为纯粹主义者只会使用界面,因为它更抽象,具体类型(算法)可以很容易更新。
但实际上,为每个类型的类创建一个接口对于你的项目来说真的很脏,并创建了多个无用的类/接口。所以这对我来说不是一个好主意。
总而言之,我更喜欢使用我真正需要的东西。如果保持通用是很重要的,我使用接口Map,但在大多数情况下,我不关心这个,我更喜欢这个容器不那么抽象,所以我更喜欢使用HashMap。
事实上,它更像是一个巨魔和围绕熊的讨论,而不是真正的回应。 每个开发人员都有自己的感觉。
答案 4 :(得分:0)
除非您需要指定必须使用该接口的某个实现,否则使用该接口始终是最佳做法。
这是因为它为未来提供了最大的灵活性 - 通过消除对无关紧要事物的依赖来增加封装。