SORU
17 Mart 2010, ÇARŞAMBA


Numaralama.() değerleri vs EnumSet.( ) bütün. Hangisi daha tercih edilir?

EnumSet.allOf ve çok verimli görünüyor, özellikle 64'den küçük değerler ile numaralamalar için kaputun altına baktım.

Temelde tüm ayarlar tüm olası numaralandırma değerleri tek dizi paylaşım ve bilgi tek parça allOf halinde bir çırpıda ayarlanmış bir bit maskesi.

Öte yandan Numaralama.() değerleri kara büyü gibi görünüyor. Ayrıca bir dizi, bir koleksiyon değil döndürür, birçok durumda Dizileri ile süslenmiş olmalı.( ) asList koleksiyonu beklediği herhangi bir yerde kullanılabilir.

, EnumSet.allOf Enum.values Daha fazla tercih edilmelidir?

Yineleyici daha spesifik olarak, kullanılmalıdır:

for ( final MyEnum val: MyEnum.values( ) );

ya

for ( final MyEnum val: EnumSet.allOf( MyEnum.class ) );

CEVAP
18 Mart 2010, PERŞEMBE


Hangisinin daha verimli olduğunu sorumun cevabını almadım, çünkü benim de kendime göre bazı test yapmaya karar verdim.

values(), Arrays.asList( values() ) EnumSet.allOf( )üzerinde yineleme test ettim. Farklı numaralama boyutları için bu testleri 10,000,000 kez tekrar ettim. İşte test sonuçları:

oneValueEnum_testValues         1.328
oneValueEnum_testList           1.687
oneValueEnum_testEnumSet        0.578

TwoValuesEnum_testValues        1.360
TwoValuesEnum_testList          1.906
TwoValuesEnum_testEnumSet       0.797

ThreeValuesEnum_testValues      1.343
ThreeValuesEnum_testList        2.141
ThreeValuesEnum_testEnumSet     1.000

FourValuesEnum_testValues       1.375
FourValuesEnum_testList         2.359
FourValuesEnum_testEnumSet      1.219

TenValuesEnum_testValues        1.453
TenValuesEnum_testList          3.531
TenValuesEnum_testEnumSet       2.485

TwentyValuesEnum_testValues     1.656
TwentyValuesEnum_testList       5.578
TwentyValuesEnum_testEnumSet    4.750

FortyValuesEnum_testValues      2.016
FortyValuesEnum_testList        9.703
FortyValuesEnum_testEnumSet     9.266

Bu testleri komut satırından koştu için sonuçlar. Eclipse bu testler yaptım, testValues ezici bir destek var. Temelde bile küçük çeteleler EnumSet daha küçük oldu. Performans artışı for ( val : array ) döngü içinde dizi yineleyici optimizasyonu gelen inanıyorum.

Öte yandan, bir java ne zaman ihtiyacın olursa.açıklama., Arrays.asList( ) kaybeder ben inanıyorum ki özellikle küçük numaralamalar için EnumSet.allOf, geçmek koleksiyonu herhangi bir kod temeli çoğunluğa sahip olacak.

Bu yüzden kullanmanız gerektiğini söyleyebilirim

for ( final MyEnum val: MyEnum.values( ) )

ama

Iterables.filter(
    EnumSet.allOf( MyEnum.class ),
    new Predicate< MyEnum >( ) {...}
)

Ve sadece java.util.List kesinlikle gerekli olduğu Arrays.asList( MyEnum.values( ) ) kullanın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • humanHardDrive

    humanHardDri

    16 Mart 2011