2

我在属性文件中保存了几个值,但是每当我打开文件时,这些值都不是按照我编码的顺序写入的。

save.setProperty("SN", "foo");
save.setProperty("ID", "bar");
save.setProperty("TN", "example");
save.setProperty("TC", "generic");
save.setProperty("SW", "incorrect");
save.setProperty("NW", "order");
save.store(new FileOutputStream(file.getAbsolutePath(), null);

这是我打开文件时的样子:

#Sat Jul 13 19:28:59 EDT 2013
ID=bar
SW=incorrect
TC=generic
TN=example
NW=order
SN=foo

如您所见,顺序与编码完全不同。我很好奇为什么会发生这种情况。它显然不是按字母顺序排序的,我看不出它应该发生这样的任何其他原因。

4

2 回答 2

5

该类Properties扩展了Hashtable该类。

基于散列的集合的迭代顺序是未定义的。


顺便说一句,Properties extends Hashtable而不是使用Hashtable,这被认为是 JDK 中的许多设计“错误”之一。

有关其他“错误”的简要列表,请参阅此答案

于 2013-07-13T23:48:57.750 回答
1

属性系统很有可能正在使用HashMap某种描述的支持。这样您就可以多次设置相同的属性,它会更新当前值。为了有效地做到这一点,aHashMap是必需的。因此,顺序完全取决于执行HashMap(不保证按字母顺序排列)

于 2013-07-13T23:42:10.530 回答