2012-02-09 16 views
5

私はJavaのスケジュール構造を書いています。 私はKeyとしてenum DayとHashtableを持ち、値としてtimerangesのリストを持っています。ハッシュテーブルのキーとしての列挙型

timeRangeはクラスがある
public enum Day { 
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
} 

private Hashtable<Day,TimeRanges> _applyCalendar; 

...

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

} 

私の問題が含まれている方法であるが()のdoesnこのよう 右の仕事。 HashTableはハッシュテーブルの既存の要素を見つけることができず、常に最初の条件を入力します:S

Dayをクラスとして宣言し、comareTo()を実装する必要がありますか?

+4

「ハッシュテーブル」を使用している理由は何ですか? – skaffman

+3

Enumキーでは、(よく見落とされる)[EnumMap](http://docs.oracle.com/javase/6/docs/api/java/util/EnumMap.html)を使用するオプションもあります。配列とすべての操作は一定の時間です。ここで違いを生むわけではありませんが、何も費用はかかりません。 – Dmitri

答えて

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

古代の「ハッシュテーブル」クラスを決して使ってはいけない理由をよく説明しました! –

関連する問題