[英]Sstore key-values of sorted hashmap in string[]
我很抱歉发布这个不明确的问题。 这是我第一次使用hashmap,因此我很困惑。 试图以更好的方式解释这个问题 - 在string []中存储hashmap的键值
我有一个基于值的排序哈希映射。 我想从有序映射中提取键并将它们存储在String []数组中。 键的顺序(按值排序)很重要。 我用这段代码对值的hashmap进行排序 - http://www.xinotes.org/notes/note/306/
为了提取密钥数组,我试过了
String[] keys = (String[])( hm.keySet().toArray( new String[hm.size()] ) )
(这里的hm是hashmap)
但这种方法不起作用。 键字符串[]具有键但不是我想要的排序顺序。
更新:我使用了linkedHashMap,并能够将排序的键值存储在数组中。 这是代码的链接。
根据拼写错误以及您使用hashmap的说明,密钥检索的顺序与插入顺序不一致。 使用LinkedHashMap。 这是使用您进行外部排序,然后将已排序的条目插入到地图中。
如果要在将条目插入Map时对其进行排序,请使用TreeMap。 您可以使用自定义比较器或使您的密钥对象实现Comparable接口。
HashMap使用key.hashValue()对值进行排序。 请改用TreeMap。
我有一个基于值的排序哈希映射。 我已根据值对哈希映射进行了排序
不,你没有。 HashMap根本没有排序。 您可以将values()作为Collection获取,并且可以按照您喜欢的方式对其进行排序,但它不会对HashMap本身进行排序。
但这种方法不起作用。 它以随机方式存储密钥。
它没有被定义为做任何不同的事情,特别是因为你根本没有对HashMap进行排序。
你需要澄清你在这里谈论的内容。 如果要对值进行排序,请执行以上操作。 如果要对键进行排序,请使用keys()
而不是values()
'进行上述操作。 如果希望Map本身按键排序,请使用TreeMap。 如果你想让Map本身按值排序,运气不好,你就不能。
尝试这个:
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
看起来您希望HashMap
的键的顺序与键的排序列表相同。 这根本不可能 。 HashMap
的密钥由哈希表算法确定; 例如,复杂的过程取决于密钥的散列值和插入和删除的顺序。
您将获得的最接近的是创建LinkedHashMap
,并通过按排序键的顺序插入旧HashMap
中的条目来填充它。 如果您然后迭代LinkedHashMap
的键,您将按照它们的插入顺序返回它们。 但这是一个重量级的解决方案,如果您随后必须在“已排序”的地图中添加更多条目,它就会崩溃。 使用TreeMap
可能更好。
我不想对hashmap进行更改。 我只是想按照排序值的顺序得到一个包含键的数组。
在这种情况下,您只需要将HashMap的密钥提取到一个数组中并对其进行排序。 该代码已在其他答案中给出。
另一方面,如果你想做某事以便地图的键总是以排序顺序出现(你似乎在其他评论中说的那样),那么你正在改变地图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.