枚举作为HashTable的关键

时间:2012-02-09 22:43:51

标签: java collections hashtable

我正在用Java编写Schedule结构。 我有一个Hashtable,枚举日为关键,时间范围列表为值。 像这样:

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 个答案:

答案 0 :(得分:4)

我认为您要使用.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);
        }
    }

}