HashMap 在保存并从文件中读回后更改其值

HashMap changing its values after saving and reading it back from a file

我对我的 Hashmaps 行为很困惑...

HashMap<String, String> wordPairs = new HashMap<String, String>(); 
String[] lines = {"hello", "frühen", "random"};
char[] letters = new char[lines[1].length-2]

for (int i=1; i<lines[1].length-1; i++) {
  letters[i-1] = lines[1].charAt[i];
}

Array.sort(letters);

String str = "";

for (int i=0; i<letters.length; i++) {
  str += letters[i];
}

str = String.valueOf(lines[1].charAt(0)) + 
String.valueOf(lines[i].charAt(lines[1].length()-1)) + str;
wordPairs.put(str, lines[1]);

这个Codeblock从一个名为lines的Stringarray中读取一个String,并将其作为一个Value连同其对应的Key保存到Hashmap中。钥匙由相同的字母组成,但顺序不同。当我尝试打印 "str" 时,它给出了我想要的正确 str ,如果我尝试打印与键相对应的已经放置的值,它也可以工作。

保存过程如下所示:

ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(new 
File("Wordpairs.wordp")));

output.writeObject(wordPairs);

output.close();

现在是令人困惑的部分:当我现在像这样回读它时...:[=​​14=]

ObjectInputStream input = new ObjectInputStream(new 
FileInputStream("Wordpairs.wordp"));
HashMap<String, String> wordPairs = (HashMap<String, String>)input.readObject();
input.close();

...并按如下方式使用它:

String string_temp = "frühen";

System.out.println(string_temp);
System.out.println(wordPairs.get("fnehr" + "\u00b3"));
The first line gives me the real word "frühen".

第二个应该给我完全一样,因为 "frühen" 之前存储为对应于字符串 "fnehrü" 的值(我使用了 Unicode 点,因为“ü”没有被读取正确地从文件中创建一个字母)。但是相反,第二行给了我 "führen".

如果有人知道发生了什么,非常感谢帮助... 也可以随意提出保存和回读 HashMap 的不同解决方案,我不仅限于 ObjectIn-/OutputStreams!

我自己找到了问题的解决方案!

我正在从准备好的 WordList 中读取 HashMap 的单词。在这个列表中,两个单词包含完全相同的字母,所以它们在排序后看起来是一样的。在那种情况下,我只是简单地覆盖了 HashMaps 值,因为它们具有相同的键。所以这部分代码甚至都不是错误,我应该在下次检查...

不过还是谢谢大家对我问题的回答提出意见和建议!