2011-08-07 22 views
6

Seçenek 1: Karşılaştırma uygulayan bir liste oluşturun ve bir değer eklediğinizde collections.sort (Liste l) kullanarak bir sıralama yapın. Seçenek 2: Bir TreeSet yapın (her zaman kendini sıralı tutar).Karşılaştırılabilir Vs TreeSet ile Liste

Hangisi daha hızlı olacak? Bunu soruyorum, çünkü Listemde bir öğe ekleyebilmem için bana ihtiyacım olan ListIterator seçeneği veriyor.

+0

Veri yapmam 100-200 civarında özel nesneye sahip olacak. – aps

+0

Koleksiyonunuzu ne sıklıkla güncellemeyi planlıyorsunuz [göreceli olarak OPS'ye göre]? Ayrıca, TreeSet çoğaltmaları önler, Liste yapmaz - bu sorunla ilgili politikanız nedir? – amit

+0

Üzgünüm, yanlış bir şey söyledim. Aslında, koleksiyonlarım programın çalışma süresinin ilk% 10'u için sık sık güncellenecek, bundan sonra nesnelerin sayısı az ya da çok sabit hale geleceğinden artık sıralanmasına gerek yok. Bundan sonra, nesnelerin özelliklerini güncelleyeceğim. TreeSet'e – aps

cevap

13

en önemli farklar:

Criterion  | List with Collections.sort | TreeSet 
----------------+----------------------------+--------- 
cost of adding | O(n log n)     | O(log n) 
equal sort keys | permitted     | eliminated as duplicates 
iteration  | bidirectional, can insert | unidirectional, can not insert 

bir ConcurrentModificationException almadan yineleme zaman bir öğe eklemek için, bunu yapabilirsiniz:

for (E e : new ArrayList<E>(collection)) { 
    // some other code 

    collection.add(anotherE); 
} 
2

TreeSet'i buradan kullanın.

TreeSet'e eklenmesi, bir log(n) işlemidir. Listeye eklemek const time, ancak sıralama n log(n).

+1

ekleme, otomatik olarak sıralayacaktır, böylece ağaç türleri için n/n (n) ve liste sıralaması için nlog (n). –

3

Collections.sort nlog ile değiştirilmiş birleştirme-tür kullanır (n) sıralama zamanı. Her ekleme yöntemini çağırırsanız, n^2log (n) saati ile sonlanabilir. TreeSet'e ekleme işlemi garanti edilir (n). Yani eğer her ekleme için çağırırsanız n.log (n) olur. Bu yüzden TreeSet'i kullanmayı öneriyorum. Ancak TreeSet kopyalarına izin vermez, bu nedenle kararınızı etkileyebilir.

Listeyi kullanıyorsanız, Collections.sort'u kullanmak yerine, optimize etmek için yapabileceğiniz bir şey var; Öğeyi listeye her eklediğinizde, listenin zaten sıralı olduğunu biliyorsunuz, bu nedenle ekleme sıralamalarını kullanmak, bu tür durumlarda ekleme sıralamalarının daha iyi performans göstermesi nedeniyle size daha iyi bir performans sunacaktır.

+0

Yinelenmelere ihtiyacım yok. Ancak yinelemede koleksiyona nesne eklemem gerekiyordu. Bu yüzden Listeyi düşünüyordum. – aps

İlgili konular