【发布时间】:2014-05-27 11:38:10
【问题描述】:
我有一个简单的类 Cell:
public class Cell {
private int row, column;
public Cell(int row, int column) {
this.row = row;
this.column = column;
}
public void setRow(int row) {
this.row = row;
}
public void setColumn(int column) {
this.column = column;
}
public int getRow() {
return row;
}
public int getColumn() {
return column;
}
@Override
public String toString() {
return "[" + row + "," + column + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + column;
result = prime * result + row;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Cell other = (Cell) obj;
if (column != other.column)
return false;
if (row != other.row)
return false;
return true;
}
}
我创建了一个 HashMap。现在,我想按值对其进行排序。这是我的方法:
PriorityQueue<Entry<Cell, Integer>> sortedCells = new PriorityQueue<Map.Entry<Cell, Integer>>(cells.size(), new CompareByValue());
sortedCells.addAll(cells.entrySet());
而 CompareByValue 是一个比较器:
private class CompareByValue implements Comparator<Map.Entry<Cell, Integer>> {
@Override
public int compare(Entry<Cell, Integer> lhs,
Entry<Cell, Integer> rhs) {
return lhs.getValue().compareTo(rhs.getValue());
}
}
这个entrySet:
{[1,2]=1, [1,0]=2, [2,1]=1, [-1,0]=1, [-1,1]=1, [0,2]=1, [0,-1]=1}
返回这个PriorityQueue:
[[1,2]=1, [-1,0]=1, [2,1]=1, [1,0]=2, [-1,1]=1, [0,2]=1, [0,-1]=1]
为什么它不按值排序?我想要类似的东西:
[[1,0]=2, [1,2]=1, [-1,0]=1, [2,1]=1, [-1,1]=1, [0,2]=1, [0,-1]=1]
这不是我第一次使用 PriorityQueue 按值对地图进行排序,但我不明白这里发生了什么..
【问题讨论】:
-
当我使用 poll() 时,元素会按该顺序返回。应首先返回 2 值条目。
标签: java sorting hashmap priority-queue