java - 枚举作为哈希表的键

标签 java collections hashtable

我正在用 Java 编写一个时间表结构。 我有一个哈希表,其中枚举日作为键,时间范围列表作为值。 像这样:

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 无法在 hashtable 中找到现有元素,始终在第一个条件中输入 :S

有什么方法可以做到这一点而不应该将 Day 声明为类并实现 comareTo() ??

最佳答案

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

}

关于java - 枚举作为哈希表的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9220072/

相关文章:

c# - StringDictionary 类和 Dictionary<String,String> 之间有区别吗

java - 为什么我们在 selenium 中使用 set in window handles 而不是 list?

java - 基于元素值的子 ListView

algorithm - 如何为 HashSet/HashMap 实现哈希函数

java - 使用 ifelse 语句修改 JSTL 中的代码

java - 第二个 JOptionPane 不会出现

java - 导入org.dyno.visual.swing.layouts无法解析

optimization - 多少个哈希桶

java - 如何循环遍历 Map 并克隆每个值?

java - Gradle 将已编译的 Java 类包含为模块依赖项