如何声明 TreeMap - SortedMap 或 Map?

发布于 2024-11-08 10:54:33 字数 453 浏览 0 评论 0原文

我已经编写了一些工作正常的代码,但我对声明 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

情释 2024-11-15 10:54:33

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

I've used SortedMap to inform others that it is already sorted. Using Map is OK too.

野却迷人 2024-11-15 10:54:33
private Map<String, List <Bus>> busTimetable = new TreeMap<String, List <Bus>>();

除非您有充分的理由,否则请始终使用最高级别的接口。

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

Unless you have a good reason, always use the highest level interface you can.

匿名的好友 2024-11-15 10:54:33

您问题的答案取决于您的使用情况。默认情况下,您应该简单地对数据类型的接口(即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). If SortedMap provides methods that you will be using that aren't declared in Map, then program to SortedMap.

我很坚强 2024-11-15 10:54:33

如果您需要使用特定的 SortedMap 方法(例如 firstKey()/lastKey()/whatever...),则必须声明您的参考为 SortedMap。否则,如果我只打算将它用作 Map,那么我会选择 Map ,这样我就可以切换实现而无需任何其他更改代码。

If you need to use specific SortedMap methods (like firstKey()/lastKey()/whatever...), it is mandatory to declare your reference as SortedMap. Otherwise, Map is the one I'd choose, if I'm only planning on using it as a Map, so I'll be able so switch implementations without any other change in the code.

泅人 2024-11-15 10:54:33

我同意其他评论者的观点,即如果您使用原始 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 vanilla Map. Also use SortedMap 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, a HashMap may be a better choice. HashMap has O(1) access; TreeMap does not.

海螺姑娘 2024-11-15 10:54:33

这取决于您的要求和设计,只要有可能就使用最高级别的抽象,即映射。原因是假设您正在创建一个服务,它使用数据列表并在地图中生成输出。
如果您使用特定的接口 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文