我有一個包含以下字段的實體類: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'來檢查。 –