SORU
15 Mart 2011, Salı


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
15 Mart 2011, Salı


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • El SalvaLobo

    El SalvaLobo

    10 Temmuz 2006
  • Excel Functions

    Excel Functi

    4 NİSAN 2010
  • Fuse

    Fuse

    21 Kasım 2005