簡體   English   中英

HashMap已按鍵排序?

[英]HashMap is already sorted by key?

我認為HashMap是無序的,當迭代鍵時,你不知道命令是什么? 在此示例中,看起來地圖已按鍵編號排序:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {
public static void main(String[] args) {

    String[] words = {"Car", "Cat" ,"Hello", "World", "Hi", "Bye", "Dog", "Be"};

    Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();

    for (String word: words) {
        Integer len = word.length();
        List<String> l = map.get(len);
        if (l == null) { 
            l = new ArrayList<String>();
            l.add(word); 
            map.put(len, (ArrayList<String>) l);
        }
        else {
            if (! l.contains(word)) 
                l.add(word);
        }           
    }

    System.out.println(map);
}
}

輸出:

{2=[Hi, Be], 3=[Car, Cat, Bye, Dog], 5=[Hello, World]}

是的,但無法保證維持該順序。

來自Hashmap文檔

這個類不保證地圖的順序; 特別是,它不保證訂單會隨着時間的推移保持不變

你的替補標記不足以決定它。

查看TreeMap如果需要排序順序

地圖根據其鍵的自然順序進行排序,或者根據使用的構造函數在地圖創建時提供的比較器進行排序

對於小的hashCodes,HashMap變成一個數組(因為這是在下面使用的)沒有要求它這樣做,但它恰好是最簡單的實現。

簡而言之,如果向HashSet或HashMap添加0到10,您將按順序獲取它們,因為容量足夠大,可以按順序布局這些值。

Treemap是一個有序的映射,其中包含按排序順序排列的鍵,而HashMap無法保證您排序的map.So,總是在需要排序鍵時選擇Treemap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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