2010-01-03 86 views
-2

我有散列表,它的键就像“文件夹/1.txt,文件夹/2.txt,文件夹/ 3.txt”,值有这些文本文件的数据。如何排序hashmap?

现在我被卡住了。我想对这个列表进行排序。不过,这并不让我来做:( 这里是我的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)可能是这个原因吗?

+0

你想排序地图字符串,还是你想排序字符串的每个值列表? – 2010-01-03 04:12:02

+5

-1 - 这个问题是无法理解的。所有尝试的答案都是猜测问题的真正含义。 – 2010-01-03 04:22:45

+0

你是对的斯蒂芬,我们都在猜测! – akuhn 2010-01-03 04:23:44

回答

10

我想你想要的键列表排序。

如果你的HashMap被称为h,那就试试这个:

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

谢谢,它的工作! 对不起,如果我的问题让你的家伙猜测! – user238384 2010-01-03 04:46:51

+3

(-1)你不能新的SortedSet(),它是一个接口。应该是像sortedKeys = new TreeSet (h.keySet()); – RealHowTo 2010-01-03 05:51:32

+0

RealHowTo - 谢谢。你是对的。我已经解决了我的答案。 – 2010-01-03 09:02:51

2

使用TreeMap,并实现文件夹路径的比较器接口。

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

+1

树图排序*键*不是元素! – akuhn 2010-01-03 04:07:21

+0

你为什么要排序值?这没有任何意义。 – MeBigFatGuy 2010-01-03 04:10:51

+0

你先写了“元素”。现在听起来没问题,但是不会让我拿走downvote,直到你再次编辑! – akuhn 2010-01-03 04:17:55

5

为什么不只是这样做呢?

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

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

编辑:这是基于一些假设 - 等待获得更多的信息,看看OP真正需要什么。

+1

我的确看过这篇文章 - 他没有明确说出他是否想根据键或值进行排序。他也没有说如果键是字符串或文件。所以我假设他想要基于String键进行排序,这会自动使用TreeMap,而不是HashMap。 – 2010-01-03 04:20:20

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整理你尝试过的单个文件。

+0

他说他的钥匙是字符串... – 2010-01-03 04:10:13

+0

但他似乎使用逗号分隔文件名作为键,所以我编辑我的帖子有另一个猜测。请删除downvote。 – akuhn 2010-01-03 04:22:22

+0

当然,我们会看看他是否澄清过他到底在做什么:) – 2010-01-03 04:26:51

0

我相信HashMaps不能保证任何顺序,当你遍历按键。迭代顺序取决于桶和冲突。

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

+0

HashMaps不保证在按键中排序。根据http://java.sun.com/javase/6/docs/api/java/util/HashMap.html“这个类不能保证地图的顺序;特别是,它不能保证随着时间的推移订单将保持不变。“ – 2010-01-03 04:13:47

+0

对于HashMap本身是true,但可以看看LinkedHashMap(它扩展了HashMap)。它保证了键被插入的顺序。 – 2010-01-03 13:27:27

0

有时候我用LinkedHashMap中,调用键设置(),它可以让你回到一个排序方式项,您通过添加到地图时放()。

相关问题