Enum как ключ HashTable
Я пишу структуру расписания в Java. У меня есть Hashtable с перечислением Day в качестве ключа и списком временных диапазонов в качестве значения. Как это:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
private Hashtable<Day,TimeRanges> _applyCalendar;
где класс TimeRanges...
public class TimeRanges implements List<TimeRange> {
Когда я добавляю элементы в _appleCalendar, я делаю это:
public void addApplyDay(Day day,TimeRanges trs) {
if (! _applyCalendar.contains(day)) {
_applyCalendar.put(day, trs);
} else {
for ( TimeRange t : trs) {
_applyCalendar.get(day).add(t);
}
}
}
Моя проблема в том, что метод содержит () не работает правильно. HashTable не может найти существующий элемент в хеш-таблице, все время входите в первое условие:S
Есть ли способ сделать это без должен объявить Day как класс и реализовать comareTo()??
1 ответ
Решение
Я думаю, что вы хотите использовать .containsKey()
вместо contains()
, contains()
будет искать фактические объекты, тогда как containsKey()
будет искать ключи.
public void addApplyDay(Day day,TimeRanges trs) {
if (! _applyCalendar.containsKey(day)) { // << use containsKey
_applyCalendar.put(day, trs);
} else {
for ( TimeRange t : trs) {
_applyCalendar.get(day).add(t);
}
}
}