[英]java beginner : How key gets sorted in hashmaps?
我是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
**********************
但是,如果我給aa,ab,ac而不是a,b,c,則輸出是不同的
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中完成排序? 請幫忙!!
提前致謝。
java beginner : How key gets sorted in hashmaps?
從這里回答這也是你問題的答案
使用排序的TreeMap:
Map<String, Float> map = new TreeMap<String, Float>(yourMap);
它會自動按鍵排序。 我認為自然的字符串排序在你的情況下會很好。
請注意,由於查找優化而導致的HashMap不會保留順序。
如果要保留數據插入地圖的順序,可以使用LinkedHashMap。
java.util.HashMap是無序的; 你不能也不應該假設任何事情。
這個類不保證地圖的順序; 特別是,它不保證訂單會隨着時間的推移保持不變。
java.util.LinkedHashMap使用insert-order。
此實現與HashMap的不同之處在於它維護了一個貫穿其所有條目的雙向鏈表。 此鏈接列表定義迭代排序,通常是鍵插入映射的順序(插入順序)。
java.util.TreeMap是一個SortedMap,它使用鍵的自然或自定義順序。
地圖根據其鍵的自然順序進行排序,或者根據使用的構造函數在地圖創建時提供的比較器進行排序。
在您的情況下,當您使用以下
//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的集合以及可比較時的鍵給出。
我希望以上信息對您有所幫助
Hashmap未排序。 如果您必須保留訂單,則必須使用例如LinkedHashMap<K, V>
試試TreeMap,
Map<String, String> sampleMap = new TreeMap<String, String>(map);
使用TreeMap
所有鍵都按排序順序排列
hashmap沒有排序,輸出不同,因為String的hashcode不相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.