HashMap 是否保持顺序(不是插入顺序)
Does HashMap keeps its order (not insertion order)
很抱歉,如果这个问题的答案在那里。我只是找不到它。
我不关心插入顺序,我只是想确保 HashMap 保持它的顺序,中间没有使用任何放置。
如果我有以下代码:
StringBuilder keyChecker = new StringBuilder("");
for(String field : hashmap().keySet()){
keyChecker.append(field).append(",");
}
for(String field : hashmap().keySet()){
setAny(checker,x++, hashmap().get(field) );
x++;
}
下次我调用 HashMap keyset 时,(1st,2nd,3rd,etc) 字段是否总是匹配相同的字段。
从我的测试来看,它似乎总是如此,但我不确定我可能遇到的任何边缘情况。
是的。如果没有添加新项目,它将保持其顺序。空闲地图不只是决定重新排列自己。但是该顺序是不确定的,并且可以在添加项目后更改。
WJS 是正确的。也就是说,依赖于此是非常糟糕的风格。如果您实际上依赖于条目的顺序,我建议使用 TreeMap 或 OrderedMap 的 Apache Commons 实现之一。
您可能会假设订单现在将保持稳定...但如果其他开发人员处理代码,则可能不知道该假设并且代码会以意想不到的方式中断有人会很头疼。
如果您依赖入场顺序,请使用保证该顺序的数据结构。
很抱歉,如果这个问题的答案在那里。我只是找不到它。 我不关心插入顺序,我只是想确保 HashMap 保持它的顺序,中间没有使用任何放置。
如果我有以下代码:
StringBuilder keyChecker = new StringBuilder("");
for(String field : hashmap().keySet()){
keyChecker.append(field).append(",");
}
for(String field : hashmap().keySet()){
setAny(checker,x++, hashmap().get(field) );
x++;
}
下次我调用 HashMap keyset 时,(1st,2nd,3rd,etc) 字段是否总是匹配相同的字段。
从我的测试来看,它似乎总是如此,但我不确定我可能遇到的任何边缘情况。
是的。如果没有添加新项目,它将保持其顺序。空闲地图不只是决定重新排列自己。但是该顺序是不确定的,并且可以在添加项目后更改。
WJS 是正确的。也就是说,依赖于此是非常糟糕的风格。如果您实际上依赖于条目的顺序,我建议使用 TreeMap 或 OrderedMap 的 Apache Commons 实现之一。
您可能会假设订单现在将保持稳定...但如果其他开发人员处理代码,则可能不知道该假设并且代码会以意想不到的方式中断有人会很头疼。
如果您依赖入场顺序,请使用保证该顺序的数据结构。