2012-02-09 60 views
5

我正在寫一個Java中的計劃結構。 我有一個枚舉日作爲關鍵和時間範圍作爲價值列表的哈希表。 像這樣:枚舉作爲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); 
     } 
    } 

} 

我的問題是方法包括()沒有按沒有正確的工作。 HashTable無法在哈希表中找到現有元素,所有時間都輸入第一個條件:S

有沒有辦法做到這一點,而不應該將Day聲明爲類並實現comareTo()?

+4

爲什麼你使用'Hashtable'呢? – skaffman 2012-02-09 22:47:48

+3

使用Enum鍵,你也可以選擇使用(經常被忽略的)[EnumMap](http://docs.oracle.com/javase/6/docs/api/java/util/EnumMap.html),它的支持一個數組和所有操作都是不變的時間。並不是說這裏會有所作爲,但也不會花費任何東西。 – Dmitri 2012-02-09 23:26:55

回答

4

我想你想用.containsKey()而不是。 將搜索實際對象,而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'類的很好的例子! – 2012-02-10 20:36:30