如何排序hashmap?

时间:2010-01-03 04:01:22

标签: java hashmap

我有hashmap,其键如“folder / 1.txt,folder / 2.txt,folder / 3.txt”,值包含这些文本文件数据。

现在我被困了。我想对此列表进行排序。但它不允许我这样做:( 这是我的hashmap数据类型:

HashMap<String, ArrayList<String>> 

以下函数工作正常,但是对于arraylist不适用于hashmap。

Collections.sort(values, Collections.reverseOrder());

我也尝试了MapTree,但它也没有用,或者可能是我无法使用它。我用了 以下步骤使用maptree

对代码进行排序
HashMap testMap = new HashMap();
Map sortedMap = new TreeMap(testMap);

其他任何方式吗??

我有一个疑问,因为我的密钥是(文件夹/ 1.txt,文件夹/ 2.txt)可能是这个原因?

6 个答案:

答案 0 :(得分:10)

我猜您希望按键列表排序。

如果你的hashmap被称为h,那么试试这个:

SortedSet<String> sortedKeys = new TreeSet<String>(h.keySet());

答案 1 :(得分:5)

为什么不这样做?

Map<String, ValueObject> testMap = new TreeMap<String, ValueObject>();

其中ValueObject是您用于值的任何类。

编辑:这是基于一些假设 - 等待获取更多信息以了解OP真正需要的内容。

答案 2 :(得分:2)

使用TreeMap,并为文件夹路径实现Comparator接口。

比较器应根据您想要的规则比较两个键,并将该比较器传递给TreeMap的构造函数。如果按纯字母规则排序是可以的,那么您可以跳过此步骤。如果你想对路径做一些特殊的事情,那么你需要定义比较器中的内容。

答案 3 :(得分:0)

我的第一个猜测是使用File个对象而不是String个对象作为键。但后来我注意到你说你的密钥是"folder/1.txt,folder/2.txt,folder/3.txt",你的值是Collection<Strings>类型。如果是这样,也许你的解决方案应该是

map.put("folder/1.txt", ...);
map.put("folder/2.txt", ...);
map.put("folder/3.txt", ...);

而不是

map.put("folder/1.txt,folder/2.txt,folder/3.txt", new ArrayList(...));

在您尝试时使用TreeMap对单个文件进行排序。

答案 4 :(得分:0)

我相信当您遍历密钥时,HashMaps不保证任何排序。迭代顺序取决于存储桶和冲突。

您可能希望将值放入其他集合中,然后对它们进行排序。

答案 5 :(得分:0)

有时我使用LinkedHashMap,当调用keySet()时,它会以排序的方式返回项目,当你通过put()添加到地图时。