2

我编写了一些运行良好的代码,但我对声明 TreeMap 的正确方法感到困惑。

如果 SortedMap 是 Map 的子接口,那么如果代码工作正常,可以只使用 Map 吗?如果 TreeMap 与 Map 配合良好,SortedMap 是否必要?

应该是:

private Map<String, List <Bus>> map = new TreeMap<String, List <Bus>>();

或者

private SortedMap<String, List <Bus>> map = new TreeMap<String, List <Bus>>();

谢谢。抱歉,这太基础了——我是 Java 新手。

4

6 回答 6

5

我曾经SortedMap告诉其他人它已经排序。使用Map也OK。

于 2011-05-18T22:46:25.503 回答
1
private Map<String, List <Bus>> busTimetable = new TreeMap<String, List <Bus>>();

除非您有充分的理由,否则请始终尽可能使用最高级别的界面。

于 2011-05-18T22:44:09.900 回答
1

您的问题的答案取决于您的使用情况。默认情况下,您应该简单地编程到数据类型的接口(即Map)。如果SortedMap提供了您将要使用但未在 中声明的方法Map,则编程到SortedMap.

于 2011-05-19T03:32:48.683 回答
0

这取决于您的要求和设计,尽可能使用最高级别的抽象,即 Map。原因是说您正在创建一个服务,它使用数据列表并在 Map 中生成输出。如果您使用特定的接口 SortedMap ,某些客户端可能期望地图中数据的排序顺序,而其他一些客户端可能只需要地图的插入顺序中的数据;这种场景你不能使用一个服务来处理,你最终会创建两个不同的 api,因为一个期望排序顺序的 API,你可以只返回 TreeMap 的实现,一个用于插入顺序,你可以使用 LinkedHashMap。所以这是关于你的程序有多灵活。

于 2013-02-12T22:30:38.813 回答
0

如果您需要使用特定SortedMap方法(例如firstKey()// lastKey()whatever...),则必须将您的引用声明为SortedMap. 否则,Map我会选择那个,如果我只打算将它用作一个Map,那么我将能够切换实现而无需对代码进行任何其他更改。

于 2011-05-18T23:41:25.230 回答
0

SortedMap如果您使用不在 vanilla 中的方法,我同意您使用的其他评论者MapSortedMap如果您在迭代器或 for-each 循环中使用,如果它们隐式 依赖于已排序的输入,也可以使用它们。

如果这两种情况都不成立,您还应该考虑是否只需要 vanilla Map, aHashMap可能是更好的选择。HashMap具有 O(1) 访问权限;TreeMap才不是。

于 2011-05-19T04:36:56.723 回答