HashMap меняет свои значения после сохранения и чтения из файла - PullRequest
0 голосов
/ 16 сентября 2018

Я очень озадачен своим поведением хэш-карт ...

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 и сохраняет ее как значение вместе с соответствующим ключом в хэш-карте.Ключ состоит из одинаковых букв, но в другом порядке.Когда я пытаюсь распечатать «str», это дает мне правильную строку, которую я хочу, которая также работает, если я пытаюсь напечатать уже введенное значение, соответствующее ключу.

Процесс сохранения выглядит следующим образом:

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, потому что «ü» не читаются из файлов правильно и, например, создаютписьмо с этим кодом).Но вместо этого вторая строка дает мне «führen».

Если кто-то знает, что происходит, помощь очень ценится ... Также не стесняйтесь придумать другое решение для сохранения и чтения HashMaps,я не ограничен только ObjectIn- / OutputStreams!

1 Ответ

0 голосов
/ 19 сентября 2018

Я сам нашел решение своей проблемы!

Я читал слова для HashMap из подготовленного WordList. В этом списке два слова содержали одинаковые буквы, поэтому после сортировки они выглядели одинаково. В этом случае я просто перезаписывал значения HashMaps, потому что у них был один и тот же ключ. Так что это даже не было ошибкой в ​​этой части кода, которую я должен проверить в следующий раз ...

Но спасибо всем за ваши мнения и предложения за ответ на мой вопрос!

...