哈希表中的键可以使用枚举类型

5

我正在用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()方法不能正常工作。 哈希表无法在哈希表中找到现有元素,始终进入第一个条件:S 有没有不用声明Day为类并实现comareTo()的方法来解决这个问题?

4
你为什么要使用Hashtable呢? - skaffman
3
使用枚举作为键时,你还可以选择使用(通常被忽视的)EnumMap,它由数组支持,所有操作都是常数时间。虽然在这里并没有什么不同,但也不会有任何额外的开销。 - Dmitri
1个回答

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);
        }
    }

}

1
永远不要使用古老的Hashtable类,这是一个很好的例子! - Kevin Bourrillion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接