Итак, я создал HashMap (ресурс - это мое собственное создание), каждый из которых является файловым путем для каждого ресурса. Теперь, допустим, у меня есть ресурс с файловым «mat \ 10wdim3.mat» в HashMap, попытка получить его не удастся, потому что оба хэш-кода не равны.String в равенстве HashMap
в хэш-код карты для этого ключа: -347056295 Строка Я использую, чтобы попытаться восстановить этот ресурс: -2128683668
Там нет скрытых символов я мог бы найти либо в строках. Есть ли другой способ, чтобы хэш-коды не совпадали?
EDIT:
В том числе некоторые примеры кода
Инициализация в конструкторе. Создание и добавление ресурсов (Путь к файлу отделан заранее)
private Map<String, Resource> m_Files;
public ResourceManager() {
m_Files = new HashMap<String, Resource>();
}
public Resource createResource(String filepath, byte[] contents) {
if (filepath != null && contents != null && contents.length > 0) {
String extension;
int lastIndex = filepath.lastIndexOf(".");
Resource res = null;
if (lastIndex == -1)
return null;
extension = filepath.substring(lastIndex).toLowerCase();
// TODO: Optimize this by putting the most common at the top
try {
if (extension.equals(".pup"))
res = new Puppet(contents);
else if (extension.equals(".bm"))
res = new Bitmap(contents);
else if (extension.equals(".snd"))
res = new SoundFile(contents);
else if (extension.equals(".cmp"))
res = new ColorMap(contents);
else if (extension.equals(".mat"))
res = new Mat(contents);
else if (extension.equals(".sft"))
res = new Font(contents);
/*else if (extension.equals(".ai") // Normal AI
|| extension.equals(".ai0") // Easy AI
|| extension.equals(".ai2")) // Hard AI
res = new AIFile(contents);*/
if (res != null) {
addResource(filepath, res);
return res;
}
} catch (RuntimeException e) {
e.printStackTrace();
}
}
return null;
}
public void addResource(String filepath, Resource res) {
if (filepath != null && res != null && m_Files.put(filepath, res) != null)
System.out.println("[!] Replacing " + filepath);
}
public Resource getResource(String filepath) {
return m_Files.get(filepath);
}
Для того, чтобы получить сказал ресурсу
ResourceManager rManager = new ResourceManager();
rManager.loadGOB("C:/Documents and Settings/Unrealomega/Desktop/JKDF2/GOB/Resource/Res2.gob");
Resource res = rManager.getResource("mat\10wdim3.mat");
Key = filepath, value = resource object? Что такое сделка с HashCodes? Можете ли вы предоставить примерный код? –
Этого не должно быть, не совсем, нет. Фактический код? – Affe
Было бы сложно дать вам ребята весь код сам, но я могу хотя бы отредактировать свой пост с тем, как я добавляю к HashMap. – Unrealomega