我编写了一些工作正常的代码,但我对于声明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的新手。
答案 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
。
如果这两种情况都不属实,您还应该考虑一下,如果您只需要一个香草Map
,HashMap
可能是更好的选择。 HashMap
有O(1)访问权限; TreeMap
没有。
答案 5 :(得分:0)
这取决于您的要求和设计,尽可能使用最高级别的抽象,即Map。原因是你正在创建一个服务,它使用数据列表并在Map中生成输出。 如果使用特定接口SortedMap,某些客户端可能期望地图中数据的排序顺序,而某些其他客户端可能只需要按地图的插入顺序排列数据;你无法使用一种服务来处理这种情况,你最终会创建两种不同的api,因为你期望排序顺序你可以返回TreeMap的实现,一种用于插入顺序你可以使用LinkedHashMap。所以这是关于你的计划有多灵活。