gpt4 book ai didi

java - 使用类是否更有效,例如哈希表比接口(interface),例如 map ?

转载 作者:行者123 更新时间:2023-12-02 08:47:46 25 4
gpt4 key购买 nike

如果编译器知道它将使用的实际类与接口(interface),它会生成更好的代码吗?

例如,我像这样引用我的实际类(class):

Hashtable<String,String> foo() {
Hashtable<String,String> table = new Hashtable<String,String>(100);
....
return table;
}

...

Hashtable<String,String> tbl = foo();

VS

Map<String,String> foo() {
Map<String,String> table = new Hashtable<String,String>(100);
....
return table;
}

...

Map<String,String> tbl = foo();

第一种形式会更有效吗?

<小时/>

好的,现在总结一下答案。我希望我能够将 Thomas 和 Tagir 标记为正确,但我不能。

Thomas 是正确的,因为“正确”的行为是使用抽象接口(interface)(Map)而不是具体实现(Hashtable)。这是数据的正确抽象,并允许随意更改底层实现。

Tagir 是正确的,因为公开具体类允许某些编译器优化——可能是非常重要的优化。然而,要知道这是否有效需要了解编译器内部结构或基准测试,并且不可移植。它可能不适用于 Android。

最后,如果你关心性能,就不要使用Hashtable;它已经过时且笨重。如果您确实关心性能,请考虑使用数组。

最佳答案

就运行时效率而言,两者应该相等,因为在两种情况下都是 Hashtable已使用。

在设计方面使用Map在大多数情况下会更好,即当 Map 的实现不相关时用来。一般来说,您应该尽可能使用接口(interface),以便您可以替换实现,例如使用HashMap相反。

Hashtable之间的区别和HashMap例如,主要是由于线程安全,即 Hashtable是同步的,因此是线程安全的,而 HashMap由于缺乏同步,可以产生更好的性能。如果您使用 Map在您的界面中您还可以使用 ConcurrentHashMap无需更改调用者并获得线程安全性和性能(尽管我不确定 ConcurrentHashMapHashtable 之间会有多大差异)。

关于java - 使用类是否更有效,例如哈希表比接口(interface),例如 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32198688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com