如果我同时插入相同的东西,两个HashMap应该以相同的顺序存储

时间:2014-08-02 13:08:27

标签: java collections

我怀疑。如果我使用两个HashMap,则以相同的顺序存储相同的内容。我可以确认地说HashMap都以相同的顺序存储了数据。

4 个答案:

答案 0 :(得分:2)

如果两个HashMap实例都使用相同的值(大小,加载工厂)进行实例化,然后使用相同的顺序插入带有键的值,则条目的迭代顺序将相同。

但真正的问题是它为什么重要?虽然我们可以说它们将处于相同的顺序,但我们不能说这个顺序是什么。如果订单很重要,您需要查看SortedMap(按比较器排序)或LinkedHashMap(按插入顺序排序)。

答案 1 :(得分:1)

HashMap不保证订单,TreeMap确实如此。

答案 2 :(得分:1)

我认为这比真正的单词问题更具理论性问题。如果你要依赖于Map中元素的顺序,你应该使用实例来保证它的顺序,就像LinkedHashMap使用放置元素的顺序一样。无论如何这里是我的答案:


我会说是的。如果您向算法提供所有完全相同的数据(在本例中为排序算法)两次,并且算法仅基于此数据,则应获得完全相同的结果。

HashMas仅使用一种算法对其元素进行排序。它们的顺序对您来说并不自然(此地图不会按照您定义的属性对对象进行排序),因为它将取决于您作为键传递的对象hashcode的结果。
因此,如果您将完全相同的对象传递给两个地图(相同状态身份的实例),您应该获得与相同的订单这些对象保证正确实现了hashcode(和equals)方法。如果哈希码的结果依赖于时间(这是哈希码方法的错误实现),这种哈希码就不会得到相同的顺序。将会中断HashMap(它将无法正确找到其元素)。

答案 3 :(得分:0)

你无法对引擎下的算法做出假设,所以没有。此外,您不能依赖于基础算法随时间保持不变。如果您需要相同的订单,您必须明确地这样做。例如,使用TreeMap并创建适当的键或排序方法,而不是HashMap。