具有两个用于排序的参数的最小堆的实现 [Java]

Implementation of min Heap with two parameters for sorting [Java]

我正在尝试在 java 中实现一个基于两个参数排序的最小堆。最小堆的每个元素都是一个包含 int 和 string 的对象。我当前的实现仅基于整数进行排序,但我还需要它按字母顺序排序。例如,如果对象的内容如下:

{(停止,3),(任何地方,1),(食物,17),(得到,3),(完成,1)}

从堆中移除元素时的输出必须是:

{(任何地方,1),(完成,1),(得到,3),(停止,3),(食物,17)}

我的下沉和游泳功能描述如下:

 private void swim(int n){
        while (n > 1 && greater(n/2, n)){
            exchange(n, n/2);
            n = n/2;
        }
    }
 private boolean greater(int i, int j){
        return elements[i].getValue() >= elements[j].getValue();
    }
    private void exchange(int i, int j){
        Node tmp = elements[i];
        elements[i] = elements[j];
        elements[j] = tmp;
    }
    private void sink(int k){
        while(2*k <=n){
            int i = 2*k;
            if(i < n && greater(i, i+1)) i++;
            if(!greater(k,i)) break;
            exchange(k,i);
            k = i;
        }
    }

如有任何帮助,我们将不胜感激!

更新

非常感谢@AlbertoSinigaglia,您的解决方案成功了!

你只需要这样更新greater方法:

return /*1*/ elements[i].getValue()>elements[j].getValue 
           || 
         /*2*/ (elements[i].getValue()==elements[j].getValue() && elements[i].getString().compareTo(elements[j].getString())>0)

使用 1 检查 int 值是否更大,如果是,那么到此结束,否则它应该是 o =< 我们需要处理= 的情况,所以如果值相等,那么我们将 String 与 compareTo() 方法进行比较,如果第一个 String 大于 return >0第二个字符串