Çok sayıda özel nesneyi sıralamak ve kullanmak için bir öncelik sırası kullanıyorum. Nesnelerin, doğal düzenleri olan "ağırlığı" vardır. Bununla birlikte, öncelik sırasına eklenen farklı nesneler aynı "ağırlığa" sahip olabilir. Bu gibi durumlarda, öncelik sırasının, sıraya eklendikleri sırayla sipariş vermelerini istiyorum.PriorityQueue, aynı öncelikte olan nesnelere sahip
Örneğin, CustomObjects A, B, C, D'yi bu sıraya eklediğimde, öncelik sırasından aynı "ağırlığa" sahip olanların tümü de bunları sırayla döndürmelidir. diğerlerine eklemeden önce daha fazla nesne.
İşte benim özel nesne için CompareTo geçerli:
public int compareTo(CustomObject o) {
int thisWeight = this.weight;
int thatWeight = o.weight;
if(thisWeight < thatWeight){
return -1;
}
else{
return 1;
}
}
Bu o ilk düzeni korumak düşündüm ederken, öyle değil. Bu, 1 ile A, B, C'yi girdiğimde oluşur; Anket A; ve D, E'yi de ağırlık 1 ile de ekleyin. Her nasılsa, D ve E B'den sonra, ancak C'den önce sıralanır.
PriorityQueues için yineleyicinin doğru sıralamayı döndürmediğinin farkındayım, bu yüzden siparişe bakma yeteneği - ancak, elemanların kuyruğu terk ettiği sırayı görebiliyorum ve açıkça istediğim yolu takip etmiyor.
Öneriler?
@Stephan: Güncelleme yanıtı – Cratylus
Ekstra bir ifade ekleyerek kendi karşılaştırmamı değiştirdim. Ama cevabın gerçek etine gelince - Mükemmel, teşekkürler! – USS1994