首页 > 解决方案 > 如何使用 PriorityQueue 进行排序Java中的3值?

问题描述

我正在尝试使用PriorityQueueand进行排序Comparator,但我不知道如何编写方法..

如果第三个元素相同,我想将它与第一个元素进行比较。如果第一个元素也相同,我想将它与第二个元素进行比较。

我试着用比较方法写:

if(o1[2]<o2[2])
 return 1;
else if(o1[2]>o2[2])
 return -1;
return 0;

但不工作..请帮帮我...

Queue<int[]> q = new PriorityQueue<int[]>(new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return 0;
    }
});

q.add(new int[] {2, 2, 2});
q.add(new int[] {2, 4, 2});
q.add(new int[] {3, 3, 2});
q.add(new int[] {3, 1, 2});
q.add(new int[] {2, 7, 1});
q.add(new int[] {4, 7, 1});

我想获取队列数据

2 7 1

4 7 1

2 2 2

2 4 2

3 1 2

3 3 2

标签: javapriority-queue

解决方案


使用数组的不同部分进行比较。如果您有差异,请返回它,这允许排序。如果没有区别,请使用另一个数组索引进行另一次比较。因此,在您的情况下,对于第三个 -> 第一个 -> 第二个,使用索引 2、0 和 1。

    public int compare(int[] o1, int[] o2) {
        int out = compareUsingIndex (2, o1, o2);
        if (out !=0){
            return out;
        }
        out = compareUsingIndex (0, o1, o2);
        if (out !=0){
            return out;
        }
        return compareUsingIndex (1, o1, o2);
    }
    
    private int compareUsingIndex(int index, int[] o1, int[] o2){
        if (o1[index]==o2[index]){
           return 0;
         }
        else if (o1[index]>o2[index]){
           return 1;
         }
        return -1;
    }

推荐阅读