Java: sırayla benzersiz öğeler içeren liste

Nesneleri artan düzende depolayan ve bu nesne daha önce eklenmişse eklenmeyen java'da bir liste türü var mı? Java haritalarının bunu yapabileceğini biliyorum ama merak ediyorum ne istediğimi yapan bir liste tipi var. Aksi halde içerir, equalsTo'yu geçersiz kılmalı ve yöntemleri eklemeliyim, değil mi?

19
Y U NO kullanım kümesi?
katma yazar r15habh, kaynak
Ardından ArrayList türetilir ve add yöntemleri geçersiz kılınır. Nesne eklemeden önce şunu içerir yöntemini kullanarak nesne varlığını test edin. Sipariş, endeksle (liste gibi) doğru erişim demektir?
katma yazar Prince John Wesley, kaynak
Hayır, içeriklerini geçersiz kılmamalısınız, içerdiği için içerik türünün eşittir (). Geçersiz kılmanız gereken, koleksiyonunuzda saklamak istediğiniz türünüzün eşittir yöntemidir. (Karma koleksiyonları kullanırsanız). Zaten belirtildiği gibi en iyi seçim TreeSet, zaten. (Veya bir tür doğal siparişten ziyade, instertion sırasını tutmanız gerekiyorsa LinkedHashSet)
katma yazar zeller, kaynak
@Prince John Wesley: ArrayList'i geçersiz kılmak iyi bir fikir değildir çünkü listeler anlamsal olarak teklikle ilgili değildir. Bunun dışında, tekerleği yeniden icat etmekten daha iyi çözümler var.
katma yazar zeller, kaynak
Hangi siparişi kastediyorsunuz - ekleme veya doğal siparişle mi?
katma yazar denis.solonenko, kaynak
Sipariş hakkında daha fazla bilgi vermeyi unuttuğum için üzgünüm. Nesnelerimi artan sırada depolamak istiyorum. Yanıtlarınız için teşekkürler.
katma yazar meandbobbymcgee, kaynak

8 cevap

Yani sadece benzersiz öğeleri içeren bir listeye ihtiyacınız var? İki seçenek:

  • java.util.LinkedHashSet - preserves the order of insertion, has the set semantics
  • from commons-collections SetUniquieList - allows list operations like get(..) and set(..)
  • from commons-collections ListOrderedSet
37
katma
evet, onun gereksinimi, LinkedHashSet 'in yaptığı "düzeni koru" idi. Ve eğer rasgele erişime ihtiyacı varsa, diğer seçeneklerden birini kullanabilir
katma yazar Bozho, kaynak
+1 Askerin isteklerini tamamen göz ardı etmemek ve bir (keyfi) Set'e ihtiyacı olduğunu söylemek.
katma yazar G_H, kaynak

Hangi sırayı kastettiğine bağlı.

14
katma

TreeSet hile yapacak. Örnek :

SortedSet myOrderedUniqueList = new TreeSet()

4
katma

Sanırım SortedSet'ten sonra (bu Set'i genişleten bir arayüz). Set bir Liste gibidir, ancak her bir değerden sadece birini içerir.

TreeSet, SortedSet'in yaygın olarak kullanılan bir uygulamasıdır.

http://download.oracle.com/javase/6 /docs/api/java/util/TreeSet.html

4
katma

TreeSet might be exactly what you need.

Öğeleri sıralanmış bir ağaçta depolar. Böylece bunları sırayla sıralayabilirsiniz. Bu bir liste değil, eklemek ve içermek açısından daha iyi performans gösteriyor.

1
katma

It is not a list, but you can look at implementations of Set http://download.oracle.com/javase/6/docs/api/java/util/Set.html

0
katma

SortedSet, kümedeki öğelerin sıralanmasını garanti eden Set'in bir alt arabirimidir.

SortedSet orderedSet = new TreeSet();

Yinelenen öğeleri, öğe değerlerinin artan sırasına göre sakladığınızda bunları kullanın

0
katma

Java.util.LinkedHashSet'i benzersiz özellik (ler) kullanarak hashCode() ve eşittir (Object obj) ile geçersiz kılınmış olarak kullanın

0
katma