我有一个包含以下字段的实体类:id,orderNo。每个 实体必须存储在一个java优先级队列中。 id在1至3000之间的元素 具有更高的优先级,并且必须以 的升序存储,不存在于id> 3000的元素之上。具有> 3000的元素的元素 以高于优先级元素 的orderNo的升序存储与ids 1 - 3000)。为优先级较高的元素和其他优先级较低的元素排序优先队列
如:
(1st insertion to queue: id=4000 orderNo=1)
(2nd insertion to queue: id=5000 orderNo=2)
(3rd insertion to queue: id=100 orderNo=3)
(4th insertion to queue: id=50 orderNo=4)
预期排序顺序:
(id=100 orderNo=3)
(id=50 orderNo=4)
(id=4000 orderNo=1)
(id=5000 orderNo=2)
OrderEntity类:
public class OrderEntity implements Comparable<OrderEntity> {
private int id;
private int getOrderNo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrderNo() {
return getOrderNo;
}
public void setOrderNo(int getOrderNo) {
this.getOrderNo = getOrderNo;
}
@Override
public int compareTo(OrderEntity arg0) {
if ((this.getId() >= 1 && this.getId() <= 3000) && (arg0.getId() >= 1 && arg0.getId() <= 3000)) {
if (this.getOrderNo() > arg0.getOrderNo()) {
return 1;
} else {
return 0;
}
} else if ((this.getId() <= 3000) && (arg0.getId() > 3000)) {
return 1;
} else if ((this.getId() > 3000) && (arg0.getId() <= 3000)) {
return 1;
} else if ((this.getId() > 3000) && (arg0.getId() > 3000)) {
if (this.getOrderNo() > arg0.getOrderNo()) {
return 1;
} else {
return 0;
}
} else {
return 0;
}
}
}
订单处理器类:
public class OrderProcessor {
private static int count;
static Queue<OrderEntity> pq = new PriorityQueue<>();
public String createOrder(int id) {
OrderEntity orderEntity = new OrderEntity();
orderEntity.setId(id);
count = count + 1;
orderEntity.setOrderNo(count);
pq.add(orderEntity);
String res = "";
for (OrderEntity rd : pq) {
res = res + rd.getId() + " " + rd.getOrderNo() + "\n";
}
return res.trim();
}
}
而你的问题是......? –
我的问题是,我无法通过上述实现获得此序列。想知道我出错的地方。 –
一个问题是你的'compareTo'方法,如果第一项不大于第二项,则返回0(意味着相等)。 “compareTo”应该返回-1,0或1,具体取决于第一项是小于,等于还是大于第二项。通常,您使用'Integer.compare'来检查。 –