Enum как ключ HashTable - PullRequest
       6

Enum как ключ HashTable

5 голосов
/ 10 февраля 2012

Я пишу структуру расписания на 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);
        }
    }

}

Моя проблема в том, что метод contains () не работает правильно. HashTable не может найти существующий элемент в хеш-таблице, все время входите в первое условие: S

Есть ли способ сделать это без необходимости объявить Day как класс и реализовать comareTo ()?

1 Ответ

4 голосов
/ 10 февраля 2012

Я думаю, что вы хотите использовать .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);
        }
    }

}
...