Java PriorityQueue Comparator 在特定条件下插入二维数组

Java PriorityQueue Comparator to insert a 2D array under certain conditions

我有一个二维数组 arr= [[1,4],[4,4],[2,2],[3,4],[1,1]]

我想按照以下顺序将其存储在 PriorityQueue 中: [[1,1],[2,2],[1,4],[3,4],[4,4]]

  1. 如果两个数组的第一个元素相同,则第二个元素值较小的应该先出现

  2. 如果两个数组的第二个元素相同,那么第一个元素值较小的应该先出现

  3. 否则第二个元素值小的应该先出现

我尝试了以下代码:

import java.io.*;
import java.util.*;
class Check2
{
    public static void main(String[] args) {        
        int events[][]={{1,4},{4,4},{2,2},{3,4},{1,1}};
        PriorityQueue<int[][]> min_heap= new PriorityQueue<int[][]>(events ,new Comparator<Integer>()
        {
            @Override
            public int compare(int a[][], int b[][])
            {
                int res=-1;
            
                if(a[0][1]==b[0][1])
                {
                    if(a[0][0]>b[0][0])
                        res=-1;
                    else
                        res=1;
                }
                else
                {                
                    if(a[0][1]>b[0][1])
                        res=-1;
                    else
                        res=1;
                }
            }            
        }
        );

    }
}

我收到以下错误:

Check2.java:8: error: <anonymous Check2> is not abstract and does not override abstract method compare(Integer,Integer) in Comparator
    {
    ^
Check2.java:9: error: method does not override or implement a method from a supertype
        @Override
        ^
Check2.java:7: error: incompatible types: int[][] cannot be converted to int
    PriorityQueue<int[][]> min_heap= new PriorityQueue<int[][]>(events ,new Comparator<Integer>()
                                                                ^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
3 errors

我知道比较函数不适用于此处的二维数组,但我该如何获得结果。

我尝试通过检查所有地方来实施其他技术,但没有成功。请帮忙

排队

PriorityQueue<int[][]> min_heap= new PriorityQueue<int[][]>(events ,new Comparator<Integer>()

您提供集合作为第一个参数,但 PriorityQueue 没有这样的构造函数。您不能在一个构造函数中提供比较器和集合。

而且您仍然不需要在 PriorityQueue 中存储 int[][] 来解决这个问题,而是存储 int[]

public static void main(String[] args) {
    int[][] events ={{1,4},{4,4},{2,2},{3,4},{1,1}};
    PriorityQueue<int[]> min_heap = new PriorityQueue<>((x, y) -> {
        if(x[0] != y[0]) {
            return Integer.compare(x[0], y[0]);
        }

        if(x[1] != y[1]) {
            return Integer.compare(x[1], y[1]);
        }

        return 0;
    });
    min_heap.addAll(Arrays.asList(events));
    while(min_heap.peek() != null) {
        System.out.println(Arrays.toString(min_heap.poll()));
    }
}

输出:

[1, 1]
[1, 4]
[2, 2]
[3, 4]
[4, 4]
 PriorityQueue<int[]> minHeap = new PriorityQueue<>(Comparator.comparingInt(a -> a[0]));

for (int[] a: arr) {
    minHeap.offer(a);
}