我很抱歉发布这个不明确的问题。这是我第一次使用hashmap,因此我很困惑。试图以更好的方式解释这个问题 - store key values of hashmap in string[]
我有一个基于值的排序哈希映射。我想从有序映射中提取键并将它们存储在String []数组中。键的顺序(按值排序)很重要。 我使用此代码对值 - http://www.xinotes.org/notes/note/306/
上的hashmap进行排序要提取密钥数组,我试过
String[] keys = (String[])( hm.keySet().toArray( new String[hm.size()] ) )
(这里的hm是散列图)
但这种方法不起作用。键字符串[]具有键但不是我想要的排序顺序。
更新: 我使用了linkedHashMap,并且能够将排序的键值存储在数组中。 Here是代码的链接。
答案 0 :(得分:2)
根据拼写错误以及您使用hashmap的说明,密钥检索的顺序与插入顺序不一致。使用LinkedHashMap。这是使用您进行外部排序,然后将已排序的条目插入到地图中。
如果要在将条目插入Map时对其进行排序,请使用TreeMap。您可以使用自定义比较器或使您的密钥对象实现Comparable接口。
答案 1 :(得分:0)
HashMap使用key.hashValue()对值进行排序。改为使用TreeMap。
答案 2 :(得分:0)
我有一个基于值的排序哈希映射。 我已经根据值
对哈希映射进行了排序
不,你没有。 HashMap根本没有排序。您可以将values()作为Collection获取,并且可以按照您喜欢的方式对其进行排序,但它不会对HashMap本身进行排序。
但这种方法不起作用。它以随机方式存储密钥。
没有定义做任何不同的事情,特别是因为你根本没有对HashMap进行排序。
你需要澄清你在这里谈论的内容。如果要对值进行排序,请执行以上操作。如果您想对键进行排序,请使用keys()
代替values()
'执行上述操作。如果希望Map本身按键排序,请使用TreeMap。如果你想让Map本身按值排序,运气不好,你就不能。
答案 3 :(得分:0)
试试这个:
public static void main(String[] args) {
Map<String, String> hm = new TreeMap<String, String>();
hm.put("AAA", "typeAAA");
hm.put("BBB", "typeBBB");
hm.put("ABB", "TypeABB");
String[] keys = hm.keySet().toArray(new String[0]);
for (String key : keys) {
System.out.println("key: " + key);
}
}
输出结果为:
key: AAA
key: ABB
key: BBB
答案 4 :(得分:0)
您似乎希望HashMap
的键的顺序与键的排序列表相同。这根本不可能。 HashMap
个密钥由哈希表算法确定;例如一个复杂的过程,取决于键的哈希值以及插入和删除的顺序。
您将获得的最接近的是创建LinkedHashMap
,并通过按排序键的顺序插入旧HashMap
中的条目来填充它。如果您然后迭代LinkedHashMap
的键,您将按照它们的插入顺序返回它们。但这是一个重量级的解决方案,如果您随后必须在“已排序”的地图中添加更多条目,它就会崩溃。最好只使用TreeMap
。
我不想对hashmap进行更改。我只是想按照排序值的顺序得到一个包含键的数组。
在这种情况下,您只需将HashMap的密钥提取到数组中并对其进行排序。代码已在其他答案中给出。
另一方面,如果你想做某事以便地图的键总是以排序顺序出现(你似乎在其他评论中说的那样),你 更改地图