java - 如何使用 PriorityQueue 进行排序Java中的3值?
问题描述
我正在尝试使用PriorityQueue
and进行排序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
解决方案
使用数组的不同部分进行比较。如果您有差异,请返回它,这允许排序。如果没有区别,请使用另一个数组索引进行另一次比较。因此,在您的情况下,对于第三个 -> 第一个 -> 第二个,使用索引 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;
}
推荐阅读
- python - 没有模块 'gi' 和 ImportError:GTK3 后端需要 PyGObject 错误
- html - 在移动视图中将元素组合成轮播?
- go - Golang 将字符串化列表转换为切片
- python - 亚马逊 s3 未提供 Django 静态文件,即使所有说明都已严格遵循
- angular - 类型“CalendarOptions”.ts(2339) 上不存在属性“getDate”
- javascript - 使用 JavaScript 更改元素的显示时添加平滑过渡
- python-3.x - 使用 SQLAlchemy 和 Flask 在 HTML 中访问 backref 参数时遇到问题
- java - 为什么在Spring中扩展ResponseEntityExceptionHandler时不打印stackTrace?
- mongoose - 使用 mongoose 查找特定文档之前和之后创建的 10 个文档
- reactjs - 在 mapbox gl 中包含自定义地理编码结果作为反应应用程序的一部分