如何声明 TreeMap - SortedMap 或 Map?
我已经编写了一些工作正常的代码,但我对声明 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 新手。
I have written some code that works fine but I am confused about the correct way to declare a TreeMap.
If SortedMap is a subinterface of Map then is it okay to just use Map if the code is working okay? Is SortedMap even necessary if TreeMap works fine with Map?
Should it be:
private Map<String, List <Bus>> map = new TreeMap<String, List <Bus>>();
or
private SortedMap<String, List <Bus>> map = new TreeMap<String, List <Bus>>();
Thanks.
Sorry this is so basic - I am new to Java.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我使用
SortedMap
来通知其他人它已经排序。使用Map
也可以。I've used
SortedMap
to inform others that it is already sorted. UsingMap
is OK too.除非您有充分的理由,否则请始终使用最高级别的接口。
Unless you have a good reason, always use the highest level interface you can.
您问题的答案取决于您的使用情况。默认情况下,您应该简单地对数据类型的接口(即
Map
)进行编程。如果SortedMap
提供了您将使用的方法,但未在Map
中声明,则对SortedMap
进行编程。The answer to your question depends on your usage. By default, you should simply program to the data type's interface (i.e.
Map
). IfSortedMap
provides methods that you will be using that aren't declared inMap
, then program toSortedMap
.如果您需要使用特定的
SortedMap
方法(例如firstKey()
/lastKey()
/whatever...),则必须声明您的参考为SortedMap
。否则,如果我只打算将它用作Map
,那么我会选择Map
,这样我就可以切换实现而无需任何其他更改代码。If you need to use specific
SortedMap
methods (likefirstKey()
/lastKey()
/whatever...), it is mandatory to declare your reference asSortedMap
. Otherwise,Map
is the one I'd choose, if I'm only planning on using it as aMap
, so I'll be able so switch implementations without any other change in the code.我同意其他评论者的观点,即如果您使用原始
Map
中没有的方法,则应使用SortedMap
。如果您在迭代器或 for-each 循环中使用SortedMap
(如果它们隐式依赖于排序的输入),也可以使用它们。如果这两种情况都不成立,您还应该考虑一下,如果您只需要一个普通的
Map
,那么HashMap
可能是更好的选择。HashMap
具有 O(1) 访问权限;TreeMap
没有。I agree with other commenters that you use
SortedMap
if you use methods that aren't in vanillaMap
. Also useSortedMap
if you have use in an iterator or a for-each loop if they implicitly rely on sorted input.If neither of these cases are true, you should also think about if you only need a vanilla
Map
, aHashMap
may be a better choice.HashMap
has O(1) access;TreeMap
does not.这取决于您的要求和设计,只要有可能就使用最高级别的抽象,即映射。原因是假设您正在创建一个服务,它使用数据列表并在地图中生成输出。
如果您使用特定的接口 SortedMap ,一些客户端可能期望映射中数据的排序顺序,而另一些客户端可能只需要映射中插入顺序的数据;这种场景你无法使用一个服务来处理,你最终会创建两个不同的 api,因为一个需要排序顺序,你可以只返回 TreeMap 的实现,一个需要插入顺序,你可以使用 LinkedHashMap。所以这取决于你的程序有多灵活。
It depends upon your requirement and design whenever possible use the highest level of abstraction that is Map. The reason is say you are creating a service and it consume list of data and produce an output in a Map.
some client may expect for sorted order of the data in the map and some other client may just need the data in the insertion order of the map if you use a specific interface SortedMap ; this kind of scenarion you can not handle using one service and you will end up creating two different api becuase one who is expecting sorted order you can just return an implementaion of TreeMap and one for insertion order you can use LinkedHashMap. So it's about how flexible is your program.