你如何声明TreeMap - SortedMap或Map?

时间:2011-05-18 22:43:04

标签: java treemap

我编写了一些工作正常的代码,但我对于声明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的新手。

6 个答案:

答案 0 :(得分:5)

我已经使用SortedMap通知其他人已经排序了。使用Map也可以。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果您需要使用特定的SortedMap方法(例如firstKey() / lastKey() /等等......),则必须将您的引用声明为SortedMap。否则,Map是我选择的,如果我只打算将其用作Map,那么我将能够在没有任何其他代码更改的情况下切换实现。< / p>

答案 4 :(得分:0)

如果您使用非香草SortedMap的方法,我同意您使用Map的其他评论者。如果您在迭代器或for-each循环中使用{em>隐式依赖于已排序的输入,也可以使用SortedMap

如果这两种情况都不属实,您还应该考虑一下,如果您只需要一个香草MapHashMap可能是更好的选择。 HashMap有O(1)访问权限; TreeMap没有。

答案 5 :(得分:0)

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