hashmap如何在内部存储对象

时间:2013-04-04 11:53:50

标签: java data-structures

昨天在我班上我的教授教哈希,我想知道一件事,hashmap如何存储对象?

我知道入门课。

但我知道arraylist默认情况下可以启动10个元素,或者你可以在构造函数中设置它,如果需要更多元素设置,将创建另一个复制值的数组......

那么,hashmap如何成长?

感谢

2 个答案:

答案 0 :(得分:2)

直接来自the javadoc

  

HashMap的一个实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量。 当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表的数量大约是哈希表的两倍。水桶。

(强调我的)

如果您需要更多实现细节,源代码也随JDK一起发布。

答案 1 :(得分:1)

HashMap的内部数组为Entry,当未指定其他大小时,默认为16。

我已经编写了一小段代码,您可以在其中查看实际的地图大小,以及内部数组大小,以便进行比较。只需更改for循环,即可随意增长。

public static void main(String[] args) throws Exception{
    HashMap<Integer, Integer> m = new HashMap<Integer, Integer>();

    for(int i = 0 ; i < 100 ; i++){
        m.put(i, i);
        Field table = m.getClass().getDeclaredField("table");
        table.setAccessible(true);
        int tableLength = ((Entry[])table.get(m)).length;

        System.out.println("Map size: " + m.size());
        System.out.println("Internal table size: " + tableLength);
    }

}