我是java的新手,正在学习哈希映射的概念。
我很困惑如何在哈希映射中对键进行排序。 我明白它基于字符串长度。 但我很困惑,当字符串长度相同时,数据是如何排序的。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapExample
{
public static void main(String args[])
{
Map<String,String> map = new HashMap<String,String>(20);//SPECIFYING THE TYPE FOR FINDING HASH CODES.
//Adding values to the HashMap
map.put("key value a", "test value 1");
map.put("key value b", "test value 2");
map.put("key value c", "test value 3");
System.out.println("Retrieving values from HashMap");
retrieveValuesFromListMethod(map);
System.out.println("**********************");
}
/*This method retrieves values from Map
*/
public static void retrieveValuesFromListMethod(Map map)
{
Set keys = map.keySet();
Iterator itr = keys.iterator();
String key;
String value;
while(itr.hasNext())
{
key = (String)itr.next();
value = (String)map.get(key);
System.out.println(key + " - "+ value);
}
}
}
这是我的代码。
输出
Retrieving values from HashMap
key value c- test value 3
key value b- test value 2
key value a- test value 1
**********************
但不是a,b,c如果我给aa,ab,ac输出是不同的
Retrieving values from HashMap
key value ab - test value 2
key value aa - test value 1
key value ac - test value 3
**********************
表示1,2,3
Retrieving values from HashMap
key value 1 - test value 1
key value 2 - test value 2
key value 3 - test value 3
**********************
如何在hashmap中完成排序?请帮忙!!
提前致谢。
答案 0 :(得分:2)
java beginner : How key gets sorted in hashmaps?
取自here的答案,这也是你问题的答案
使用有序的TreeMap:
Map<String, Float> map = new TreeMap<String, Float>(yourMap);
它会自动按键排序。我认为自然的字符串排序在你的情况下会很好。
请注意,由于查找优化而导致的HashMap不会保留顺序。
如果要保留数据插入地图的顺序,可以使用LinkedHashMap。
答案 1 :(得分:2)
java.util.HashMap是无序的;你不能也不应该假设 除此之外的任何事情。
此课程不保证地图的顺序;特别是,它不保证订单将保持不变 随着时间的推移。
java.util.LinkedHashMap使用insert-order。
这个实现与HashMap的不同之处在于它维护着一个运行所有条目的双向链表。这有联系 list定义迭代排序,通常是顺序 哪些键被插入到地图中(插入顺序)。
java.util.TreeMap,一个SortedMap,使用自然或自定义排序 钥匙。
地图根据其键的自然顺序或地图创建时提供的比较器进行排序,具体取决于哪个 使用构造函数。
答案 2 :(得分:2)
在您的情况下,当您使用以下
时//Adding values to the HashMap
map.put("key value a", "test value 1");
map.put("key value b", "test value 2");
map.put("key value c", "test value 3");
这是插入密钥后的hashmap的快照
HashMap在内部使用Entry of Entry Map,键生成的哈希码被输入到哈希函数中,该函数使得该键按照您查看的顺序插入到数组中。 您正在使用迭代器来迭代hashmap,看看上面集合的迭代器的快照,因为迭代器按以下顺序查看集合,它似乎只是键被排序但实际上没有。 (注意:迭代器不保证迭代按照集合中存在的元素的顺序) 所以它只是相似而不是hashmap的实际行为。对于排序键,此行为由TreeMap或任何实现接口SortedMap的集合以及可比较时的键提供。
我希望以上信息对您有所帮助
答案 3 :(得分:0)
未对Hashmap进行排序。
如果您必须保留订单,则必须使用例如LinkedHashMap<K, V>
答案 4 :(得分:0)
尝试TreeMap,
Map<String, String> sampleMap = new TreeMap<String, String>(map);
使用TreeMap
所有键都按排序顺序
答案 5 :(得分:0)
hashmap未排序,输出不同,因为String的hashcode不相同。