簡體   English   中英

java beginner:密鑰如何在哈希映射中排序?

[英]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中的數據

HashMap在內部使用Entry of Entry Map,鍵生成的哈希碼被輸入到哈希函數,該函數使得該鍵按照您查看的順序插入到數組中。 您正在使用迭代器來迭代hashmap,看看上面集合的迭代器的快照,因為迭代器按以下順序查看集合,它似乎只是鍵被排序但實際上沒有。 Iterator snap用於迭代上面的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM