2012-02-09 2 views
5

Java에서 Schedule 구조를 쓰고 있습니다. 나는 열거 형 일을 키로하고 값으로 timeranges 목록을 가진 Hashtable을 가지고있다.HashTable의 키로 열거 형

TimeRanges 클래스는
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); 
     } 
    } 

} 

내 문제가 포함 방법을() 아무튼이 같이 맞지. HashTable은 해시 테이블의 기존 요소를 찾을 수 없으며 항상 다음 조건을 입력하십시오.

일을 클래스로 선언하고 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

고대 '해시 테이블 (Hashtable)'클래스를 사용하지 않는 이유에 대한 위대한 그림! –