关于Hash:Java Hashmap Contents

Java HashMap Contents

本问题已经有最佳答案,请猛点这里访问。

我有一个hashmap来存储我的>数据。我使用put(...)在地图中添加数据(如果还不存在的话)。我用containsKey()检查输入键是否已经在地图中。如果它存在,我通过这样做将字符串添加到键:

1
x.get(i).add(str)

为了获取数据,我只使用哈希的keySet()做了一个for循环。

如果我有这个哈希值:

1
2
3
4
int -> array of strings
1 ->"a","b","c"
2 ->"aa","bb","cc"
3 ->"aaa","bbb","ccc"

我的问题是,读取数据的顺序不一致。在1台电脑中,它可能按以下顺序读取按键:2、1、3。在另一台电脑中,它可能按以下顺序读取:1、2、3。

我希望所有PC机的读取顺序都相同。它们进入hashmap的顺序也相同,但为什么hashmap读取密钥集的顺序不同?


你读过《以东记》1〔0〕的《雅瓦多书》吗?它不能保证订购。

This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

如果您想要一致的订购,请使用LinkedHashMapTreeMap。EDCOX1 0的缺乏保证意味着,如果Java开发人员选择,它可以在星期二反向迭代。


您需要使用treemap而不是hashmap


实际上,没有办法控制哈希图中元素的输入顺序,但是可以在处理它们之前对它们进行排序。

1
2
3
4
5
6
7
8
9
10
11
public class HashMapSample {
    public static void main(String[] args) {
        Map<Integer,List<String>> myHash = new HashMap<>();
        myHash.put(1, Arrays.asList("a","aa","aaa"));
        myHash.put(3, Arrays.asList("c","ccc","ccc"));
        myHash.put(2, Arrays.asList("b","bb","bbb"));
        System.out.println(myHash);
        myHash.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey)).forEach(System.out::println);

    }
}