2013-08-06 44 views
2

在位置1和2如下所示访问地图对象时,顺序是否仍然有保证?LinkedHashMap订单

//.... 
    public void firstMethod(){ 
     Map<K,V> sortedMap=new LinkedHashMap<K,V>(); 
     sortedMap.put(h,g); 
     //.... 

     Map<K,V> anotherMap=someOtherMethod(sortedMap); 

     // order of anotherMap when read ...2 
    } 

    public Map<K,V> someOtherMethod(Map<K,V> someMap){ 

     someMap.put(a,b); 

     //order of someMap when read ...1 
     //..... 

     return someMap; 

    } 
    //.... 
+1

呃,什么?你的问题有点含糊...... – jtahlborn

+1

为什么不呢? 'LinkedHashMap'没有什么神奇的功能。 –

+0

@LouisWasserman这可能是一个愚蠢的问题,我不确定将'sortedMap'投射到'Map'和'someOtherMethod'类型'Map'的返回效果。 @ Zapl的答案清楚地表明了我的疑问。 – user624558

回答

3

如果Map对象的具体实例是LinkedHashMap是的。无论你用它做什么都无所谓。该对象将保持数据的有序性,并且如果您只投射到Map甚至Object或将其传递给方法,则实现不会更改。它将保留在内部LinkedHashMap。如果将它投射到Object,您可能不会再看到它。

假设您不知道源代码,唯一不能保证的是someOtherMethod返回您的LinkedHashMap。它也可以重新排序。

一个方法不应该被信任,除非它指定了那些东西。但是由于您在这里知道源代码,您可以保证您的订单号是LinkedHashMap

+0

谢谢。这清除了我的疑问。我不确定即使在具体类型是'LinkedHashMap'时,投射到'Map'时会产生什么效果。 – user624558

0

由于每docs

的哈希表和链接列表实现Map接口的,具有可预知的迭代顺序。

所以即使插入和删除了东西之后,顺序仍应该通过您想要对其执行的任何操作。