2012-02-09 14 views
5

'un anahtarı olarak Java'da bir Zamanlama yapısı yazıyor. Enum Day (Gün) anahtar olarak ve zaman çizelgelerinin değeri olarak bir Hashtable'ım var.EnTech, HashTable

TimeRanges sınıftır
public enum Day { 
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
} 

private Hashtable<Day,TimeRanges> _applyCalendar; 

...

public class TimeRanges implements List<TimeRange> { 

Ben _appleCalendar öğeler eklediğinizde bunu:

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

} 

Sorunum içeren yöntemdir() gelmez Bunun gibi Doğru çalışmıyor. HashTable, hashtable'daki mevcut öğeyi her zaman ilk koşulda giremez: S

Sınıf olarak gün bildirmek ve comareTo() yöntemini uygulamak zorunda kalmadan bunu yapmanın herhangi bir yolu var mı?

+4

Neden "Hashtable" kullanıyorsunuz? – skaffman

+3

Enum tuşları ile de (genellikle gözden kaçan) [EnumMap] (http://docs.oracle.com/javase/6/docs/api/java/util/EnumMap.html) kullanma seçeneğiniz vardır. bir dizi ve tüm işlemler sabit zaman. Burada bir fark yaratamayacak, ama hiçbir şeye mal olmayacak. – Dmitri

cevap

4

yerine .containsKey() kullanmak istediğinizi düşünüyorum. gerçek nesneleri arayacak, oysa containsKey() tuşları arayacaktır.

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

Niçin antik 'Hashtable' sınıfını kullanmanın harika bir örneği! –

İlgili konular