في Java، ما الذي يجب أن أستخدمه لـ PriorityQueue الذي يُرجع العنصر الأكبر أولاً؟

StackOverflow https://stackoverflow.com/questions/627130

  •  06-07-2019
  •  | 
  •  

سؤال

جافا طابور الأولوية يضع أقل عنصر في رأس القائمة، ولكنني أحتاج إلى وضع العنصر الأكبر في الرأس.ما هي أفضل طريقة للحصول على قائمة انتظار ذات أولوية تتصرف على هذا النحو.

منذ أن كتبت الفصل المخزن في قائمة الانتظار هذه، يمكنني ببساطة عكس نتائج compareTo, ، لا يتم استخدامه خارج قائمة الانتظار هذه.

ومع ذلك، أود أن أجعل الكود تمثيلًا دقيقًا لما أقوم بتصميمه، ما أحاول القيام به هو الحصول على الأفضل أولاً، لذا يجب أن يقول الكود ذلك بدلاً من الأقل أولاً مع تعريف غير عادي للأقل.

[عدل] مجرد شكر سريع للجميع، يبدو أن Comparator هو ما أحتاج إليه بمجرد أن أعلم نفسي كيفية كتابته.

هل كانت مفيدة؟

المحلول

تمرير أ المقارنة الذي يعكس الترتيب الطبيعي عند إنشاء مثيل طابور الأولوية.

سيبدو شيء هكذا:

public class ReverseYourObjComparator implements Comparator<YourObj> {
    public int compare(final YourObj arg0, final YourObj arg1) {
        return 0 - arg0.compareTo(arg1);
    }
}

نصائح أخرى

وأساسا لديك الحل حق في سؤالك: يمكنك تمرير <لأ href = "http://java.sun.com/j2se/1.5.0/docs/api/java/util/Comparator.html" يختلط = "نوفولو noreferrer"> المقارنة لمنشئ ل<لأ href = "http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html" يختلط = "نوفولو noreferrer"> PriorityQueue . فإن المقارنة تؤثر على الطريقة التي سيتم أمرت البنود.

وكنت مجرد استخدام المقارنة. بهذه الطريقة يتم استخدام ترتيب الفرز فقط في قائمة الانتظار، وليس تعلق على صفك.

وببساطة توفير PriorityQueue على Comparator<? super E> مخصص من خلال منشئ وتغيير ترتيب العناصر.

ومن javadocs:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 

لإضافة إلى التعليقات المقارنة، راجع:

Collections.reverseOrder();

وثائق المعهد على PriorityQueue تقول: "إن رئيس قائمة الانتظار هذه هو أقل عنصر فيما يتعلق ترتيب المحدد". لذا فإن تعريف الأقل هو شخصي بناء على الطلب الخاص بك محددة وهذا هو السبب لديك خيار من توفير للمقارنة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top