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 值,因为它们具有相同的键。所以这部分代码甚至都不是错误,我应该在下次检查...
不过还是谢谢大家对我问题的回答提出意见和建议!
我对我的 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 值,因为它们具有相同的键。所以这部分代码甚至都不是错误,我应该在下次检查...
不过还是谢谢大家对我问题的回答提出意见和建议!