如何使用 Java 中的 PriorityQueue<int[]> 3 值进行排序?
How to sort with PriorityQueue<int[]> 3-values in Java?
我正在尝试使用 PriorityQueue
和 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
使用数组的不同部分进行比较。如果你得到不同,return 它,它允许排序。如果没有区别,请使用另一个数组索引进行另一次比较。因此,对于第三 -> 第一 -> 第二,使用索引 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;
}
我正在尝试使用 PriorityQueue
和 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
使用数组的不同部分进行比较。如果你得到不同,return 它,它允许排序。如果没有区别,请使用另一个数组索引进行另一次比较。因此,对于第三 -> 第一 -> 第二,使用索引 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;
}