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

时间:2018-09-16 14:17:59

标签: java hashmap key-value

我对我的Hashmap行为感到非常困惑...

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]);

此代码块从称为行的Stringarray中读取一个String,并将其与相应的Key一起作为值保存到Hashmap中。密钥由相同的字母组成,但顺序不同。当我尝试打印出“ str”时,它会给我我想要的正确str,如果我尝试打印与键相对应的已放置的Value,它也可以工作。

保存过程如下:

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

output.writeObject(wordPairs);

output.close();

现在让我们困惑的部分:当我现在这样读时……:

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 Point,因为不能从文件中正确读取“ü”,例如使用此代码点创建一个字母)。但是相反,第二行给了我“führen”。

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

1 个答案:

答案 0 :(得分:0)

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

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

但是谢谢大家提出的回答我的问题的意见和建议!