Ters bakmak-up en iyi uygulama Java numaralama
Aşağıdaki "ters arama" Java getCode(int)
kullanarak Sırala: . mantıklı bir yol oldu suggested on a blog gördüm
public enum Status {
WAITING(0),
READY(1),
SKIPPED(-1),
COMPLETED(5);
private static final Map<Integer,Status> lookup
= new HashMap<Integer,Status>();
static {
for(Status s : EnumSet.allOf(Status.class))
lookup.put(s.getCode(), s);
}
private int code;
private Status(int code) {
this.code = code;
}
public int getCode() { return code; }
public static Status get(int code) {
return lookup.get(code);
}
}
Bana, statik harita ve statik başlatıcı kötü bir fikir gibi görünüyor, hem de ilk aklıma gelen arama olarak yani kod şöyle olacaktır:
public enum Status {
WAITING(0),
READY(1),
SKIPPED(-1),
COMPLETED(5);
private int code;
private Status(int code) {
this.code = code;
}
public int getCode() { return code; }
public static Status get(int code) {
for(Status s : values()) {
if(s.code == code) return s;
}
return null;
}
}
Her iki yöntemde de herhangi bir bariz sorunları, ve orada önerilen bir yol arama bu tür bir uygulama var mı?
CEVAP
Daha yüksek bir yük olmasına rağmen, statik göster code
Sabit zamanlı arama sağlar, çünkü güzel. Uygulamanız doğrusal numaralama elemanları sayısı ile arama süresini artırır. Küçük numaralamalar için, bu sadece önemli ölçüde katkı sağlayacaktır.
Hem uygulamaları (ve belki de genel olarak Java çeteleler ile) gerçekten Status
Bir kabul gizli ekstra bir değeri yok yani tek sorun: null
. İş mantık kurallarına bağlı olarak, gerçek anlamda bir numaralama değerini döndürür, ya da bir AT için arama "başarısız." Exception
, yapabilir
Java ile bir numaralama için bir Dize ...
Karşılaştırma Java numaralama üyeleri:...
döngü numaralama üzerinde yineleme içi...
Dökme Java numaralama için İnt...
İyi uygulama java kullanmaktır.lang.St...