У меня есть следующий код, который разбивает вектор на строковый вектор (для использования в качестве ключа) и целое число в конце (для использования в качестве значения).
payoffs.put(new Vector<String>(keyAndOutput.subList(0, keyAndOutput.size() - 1)), Integer.parseInt(keyAndOutput.lastElement()));
Рассматриваемая TreeMap построена с использованием Comparator со следующим методом, который налагает лексикографический, независимый от регистра порядок, который также учитывает длину (более длинные векторы всегда «больше», чем более короткие).
public int compare(Vector<String> arg0, Vector<String> arg1) {
int sgn = 0;
if (arg0.size() > arg1.size()) {
return 1;
} else if (arg0.size() < arg1.size()) {
return -1;
}
for (int i = 0; i < arg0.size(); i++) {
if (arg0.elementAt(i).compareToIgnoreCase(arg1.elementAt(i)) == 1) {
sgn = 1;
break;
} else if (arg0.elementAt(i).compareToIgnoreCase(arg1.elementAt(i)) == -1) {
sgn = -1;
break;
} else {
continue;
}
}
return sgn;
}
Теперь, для проблемы ..., несмотря на то, что в текстовом файле, из которого она читается, 8 записей, на карте всегда может быть только 2 записи. Как только одна запись (ключ) введена, она ОСТАЕТСЯ, но ЗНАЧЕНИЕ изменяется с каждой итерацией процесса сканирования (каждый раз, когда она считывает новый вектор из строки в файле). Он выбрасывает все остальные ключи, кроме двух.
Это проблема с моим компаратором? Или TreeMap делает что-то, чего я не понимаю с помощью put ()?