2011-04-17 17 views
16

Düğümlerin içerdikleri bir değere göre sıralanması gereken bir Düğüm nesnesi eklediğim bir Öncelik Sırası var. Bazı nedenlerden dolayı, öncelik sırası ekleme üzerindeki düğümleri sıralamayacaktır. Eğer bu konuda yanlış olan bir şey görebiliyor ya da herhangi bir rehber varsa, bunu takdir ediyorum. Eğer bunu yineleme zaman belirli bir sırayla elemanları dönmek için PriorityQueue bekliyoruzPriorityQueue sıralama değil

@Override 
public int compareTo(Node n) { 
    if(n.frequency.intValue() > this.frequency.intValue()) return -1; 
    else if(n.frequency.intValue() == this.frequency.intValue()) return 0; 
    else return 1; 
} 

cevap

34

sanırım: Burada

PriorityQueue<Node> PQ = new PriorityQueue<Node>(); 
     //for each entry create a node and add it to the PriorityQueue 
     for(Entry<Character,Integer> entry : entries){ 
      PQ.add(new Node(entry.getKey(),entry.getValue(), true)); 
     } 

düğümün compareTo yöntemdir: Burada kısa bir örnektir. Ancak, PriorityQueue böyle bir davranış sağlamaz, çünkü sıralı listeden ziyade öncelik yığını olarak uygulanır. javadoc kaynaktan:

Yineleyici() metodu yineleyici sağlanan herhangi bir sırayla öncelik sırası elemanlarını çapraz garanti edilmez. Sıralı geçişe ihtiyacınız varsa, Arrays.sort (pq.toArray()) kullanmayı düşünün. PriorityQueue sağladığı

tek garanti poll(), peek(), vb az elemanının geri olmasıdır. Öğelerin sıralı yinelemesine ihtiyacınız varsa, TreeSet gibi başka bir koleksiyonu kullanın.

+0

Doğru, ancak remove() yöntemini kullanarak her bir nesnenin kaldırılması üzerine sıralanmasını beklerim –

+0

@Trevor: Yineleme kodunu göstermediniz. Lütfen bir şov göstermek için sorunuzu güncelleyin, ancak derleyebildiğimiz ve çalışabileceğimiz tam * örnek *. –

+0

Nevermind, şimdi kaldır() üzerinde nesnenin sıralandığını anlıyorum. Teşekkürler –