【发布时间】:2022-01-16 11:27:07
【问题描述】:
考虑以下哈希图:
HashMap<String, Double> cityScoreMap = new HashMap<>();
具有诸如
之类的值CityB, 5.0
CityC, 10.0
CityA, 5.0
我需要按值对哈希图进行降序排序,但如果值相等,则按键升序排序:
CityC, 10.0 (highest value)
CityA, 5.0 (comes before CityB, because A < B)
CityB, 5.0 (comes after CityA)
到目前为止,我尝试按键分别排序,然后按值排序,但我不相信这种方法。 除了创建更多的哈希图之外,还有什么好的方法?
【问题讨论】:
-
Hashmap 未排序,无法排序。您可以使用带有适当比较器的 Treemap 来存储排序数据。但是,如果您只需要按排序顺序访问数据,则可以使用流,例如。
-
我不熟悉Java,但是在c++中,如果你使用的是Hashmap,那么你不需要顺序,否则你会使用法线贴图。哈希图没有设计顺序
-
最后你想要什么样的数据结构?如果您需要地图,那么您可能需要使用 TreeMap(查看官方文档了解更多信息)。
-
如前所述,要么使用带有比较器的 TreeMap,要么使用按其键的插入顺序排序的 LinkedHashMap。
-
您不能按值对任何类型的树进行排序,因为它是基于键的结构。