PriorityQueue-最大堆/Comparator比較的寫法(溢出問題)


今天利用PriorityQueue實現最大堆,寫了一個bug。

原始寫法:

        Queue<Integer> heap = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });

用lambda簡化后:

Queue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2 - o1);

注意到,這里o2-o1是會產生溢出的,會導致結果不正確。

所以采用這種寫法更好:

        Queue<Integer> heap = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        });

用lambda簡化后:

Queue<Integer> heap = new PriorityQueue<>((o1, o2) -> o2.compareTo(o1));

Queue<Integer> heap = new PriorityQueue<>(Comparator.reverseOrder());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM