Bir Set
'ten Set
elde etmek ve belirli bir Comparator
'e göre sıralamak için "iyi" (ve neden?) çözüm nedir?Set ve Karşılaştırıcı Listesinden Nasıl Alınır?
cevap
Set<Object> set = new HashSet<Object>();
// add stuff
List<Object> list = new ArrayList<Object>(set);
Collections.sort(list, new MyComparator());
Sadece bundan sonra COllections.sort() eklendi. –
Yanlış cevap, bu ArrayList yapıcısı hiçbir şey sıralamıyor, bu yüzden Karşılaştırıcı nasıl kullanılmadı, bu yüzden nasıl sıralanır olacak çalışmaz? Diğer yanıtlarda olduğu gibi Collections.sort() veya TreeSet'i kullanın. – iirekm
Yanıtlanacak aramayı dahil etmek için cevabı düzelttim. –
Sadece yapılandırın. ArrayList
, constructor taking another Collection
'a sahiptir. Eğer Comparator
ilgisi beklediğiniz emin değil
List list = new ArrayList(set);
:
Set<Foo> set = new TreeSet<Foo>(new FooComparator<Foo>());
// Fill it.
List<Foo> list = new ArrayList<Foo>(set);
// Here's your list with items in the same order as the original set.
Bu, bir Set
varken bir List
edinmektir. Set
sıralanırsa, liste öğeleri sıralı sırada içerecektir.
Açıkçası, karşılaştırmalı listeyi almak için karşılaştırıcıyı kullanmayı ve kümenin sıralanmamış olduğunu ima eder. Bir karşılaştırıcıyı başka ne kullanırdınız? Bu yüzden ya sıralı bir kümeden geçmeli ya da listeyi doldurduktan sonra sıralamalıdır. –
@Christoffer Hammarström - veya öğeleri teker teker ekleyerek sıralayın: ekleme sıralama. – Ishtar
@Ishtar: Sıralı bir setten ilk önerimi yaparsanız ne olur? –
Ya:
Set<X> sortedSet = new TreeSet<X>(comparator); ...
List<X> list = new ArrayList<X>(sortedSet);
ya: Bir sıralanmamış seti veya farklı bir sırayla sıralanır seti ile başlamak varsayarsak
Set<X> unsortedSet = new HashSet<X>(); ...
List<X> list = new ArrayList<X>(unsortedSet);
Collections.sort(list, comparator);
aşağıdaki muhtemelen varsayarak en verimli Değiştirilebilir bir Liste gerektirir. degistiremeyeceginiz Liste kabul edilebilir ise
Set<T> unsortedSet = ...
List<T> list = new ArrayList<T>(unsortedSet);
Collections.sort(list, comparator);
, ardından aşağıdaki biraz daha hızlıdır: İlk versiyonda
Set<T> unsortedSet = ...
T[] array = new T[unsortedSet.size()];
unsortedSet.toArray(array);
Arrays.sort(array, comparator);
List<T> list = Arrays.asList(array);
, Collections.sort(...)
kopya bir diziye liste içeriği, dizi ve kopyalarını sıralar sıralı öğeler listeye geri döndü. İkinci sürüm daha hızlıdır çünkü sıralanan öğeleri kopyalamaya gerek yoktur. Dürüst olmak gerekirse, performans farkı muhtemelen önemli değil. Gerçekten de, giriş seti boyutları büyüdükçe, performansın sıralaması O(NlogN)
tarafından belirlenir. Kopyalama adımları O(N)
'dur ve N büyürken önemini azaltır.
Arrays.sort ile sürümünüz aslında çok fazla (veya hiç bir şey) optimize etmez, çünkü Collections.sort() zaten benzer kod içerir: Nesne [] a = list.toArray(); Arrays.sort (a, (Karşılaştırıcı) c); ListIterator i = list.listIterator(); Için (int j = 0; j
@iirekm - 'Arrays.asList (dizi)' kullanarak, liste yineleyicisi kullanılarak gerçekleştirilen kopyalamayı önler. –
Aaah, bu fazladan kopyalama sadece çok büyük veri kümeleri için önemli olabilir. – iirekm
- 1. SASS'de renk listesinden nth değeri nasıl alınır?
- 2. Bir karşılaştırıcı akışı nasıl oluşturulur ve uygulanır?
- 3. Karşılaştırıcı karşılaştırmasıInt
- 4. Ve sql listesinden
- 5. mvc c açılır listesinden seçili değer nasıl alınır? #
- 6. set -e ve arkaplan işlemi
- 7. listesinden
- 8. Set-cookie2 ve set-cookie2 arasındaki fark
- 9. Java Karşılaştırıcı sınıf diziler
- 10. Karşılaştırıcı ihlali genel sözleşmesi
- 11. Özel bir karşılaştırıcı nasıl "sort" için geçirilir?
- 12. SimpleStringProperty set() ve setValue()
- 13. Set Teorisi ve .NET
- 14. eclipse karşılaştırıcı, farklılıkları göstermeyi durdurdu
- 15. java.lang.NoSuchMethodError: org.springframework.beans.factory.support.DefaultListableBeanFactory.getDependencyComparator() Ljava/util/Karşılaştırıcı; "}}
- 16. Set ve Oldset in sigprocmask()
- 17. JMeter ve WebDriver Set - çalışmaz
- 18. Set <String> Set []?
- 19. nasıl set imleç
- 20. İşaretleyiciler Başlık Set Nasıl
- 21. SET
- 22. ListView öğesinin görünümü nasıl alınır?
- 23. nasıl iki set
- 24. JSP Listesinden JavaScript Dizisini Doldurma
- 25. Matrisi matris listesinden doldurun
- 26. Groovy'de anahtar listeden/değer listesinden en iyi harita nasıl alınır? python'da
- 27. IE 9 set tanımlama bilgisi ve yeniden yönlendirme başarısız oldu
- 28. Karşılaştırıcı kullanılarak ayarlanan alt kümeyi alın
- 29. Zayıf_ptrs listesinden öğe kaldırılıyor
- 30. Özel bir karşılaştırıcı kullanarak genel bir listeyi nasıl sıralarım?
Bu soru belirsizdir. Örneğin, Karşılaştırıcıyı göz ardı ederek bir Küme ve Karşılaştırıcıdan bir Liste alabilirim. Karşılaştırıcıyı kullanan çözümlerden daha hızlı olması açısından "iyi" bir çözümdür. –
@Stephen Soruyu çözme –
Listeye ihtiyacınız var mı? Belki bir SortedSet yapardı. –