这个如何实现Java哈希表的问答描述了Java中Hashtable是通过静态数组实现的(基础静态数组将根据项目总数进行细化)。
为什么Java不使用动态数组(例如ArrayList)来实现Hashtable?
这样做有什么权衡之处?
这个如何实现Java哈希表的问答描述了Java中Hashtable是通过静态数组实现的(基础静态数组将根据项目总数进行细化)。
为什么Java不使用动态数组(例如ArrayList)来实现Hashtable?
这样做有什么权衡之处?
当哈希表进行调整大小时,所有的条目都需要重新定位。
使用ArrayList会更加慢,因为ArrayList会在哈希表重新计算所有值之前复制现在无用的旧值。
实现类相当不透明。由于与真正的静态数组相比,ArrayList
相当低效,因此没有必要使用它。
你不会有任何好处,至少这样可以避免使用包含哈希映射的静态数组的包装器。
调整ArrayList
的大小就像调整HashMap
一样,因为它们都使用静态底层数组,但是你需要重新散列映射的所有元素,所以真的没有必要使用它。