java对哈希集集合进行排序
如果这是重复的,我很抱歉,但我找不到任何具体回答这个问题的答案
我有一个HashMap,它包含一个字符串键和一个设置值。我想根据集合的长度对地图中的值进行排序。考虑:
HashMap<String, Set<String>> myMap;
包含:
{"A", {"Dukmerriot", "King", "Pumpkin"}}
{"B", {"Steve"}}
{"C", {"Jib", "Jab", "John", "Julie"}}
{"D", {"Apple", "Amy", "Unicorn", "Charlie", "Raptor"}}
{"E", {}}
我希望能够从myMap
高效地获取列表{"D", "C", "A", "B", E"}
(它指定集合从最大到最小的顺序)
除了创建一个实现Set并重写compareTo
方法的包装器类之外,还有其他方法可以根据集合的长度对集合进行排序吗
编辑:我应该指定不需要使用HashMap来维护此集合。我可以使用树形图或其他东西,但我不确定这是否可行,因为Set并没有实现可比性
# 1 楼答案
印刷品
我使用Google Guava的ImmutableSet,只是为了使代码简短。您可能希望查看它们的Multimap,因为您可能会发现它很有用
# 2 楼答案
哈希映射是不可排序的。它们针对按键查找值进行了优化
# 3 楼答案
因为
HashMaps
不维护内部秩序,所以不能这样做。你能做的最好的事情就是用map.values()
获取所有的值,迭代它,看看哪个值最长T
和V
是任意类型。在你的例子中,T等于String,V等于Set# 4 楼答案
这是一个完全可行的方法。您还可以使用
Comparator
:。。。但是现在您丢失了每个集合的对应键。让我们对地图条目进行排序吧
您现在可以“轻松”获得钥匙:
此列表不会是密钥的实时视图,但如果这是一个可接受的限制,它将是您的最佳选择
# 5 楼答案
我将创建一个自定义对象来保存
Set
和String
。让类实现Comparable
,实现使用设置的大小。然后只需使用List
填充它,然后Collections.sort()
获得所需的结果