我有一些实体类
class Data{
private String quoteID;
private String bidOrOffer;
private float price;
private long volume;
private Date createDate;
public Data(String quoteID, String bidOrOffer, float price, long volume) {
this.quoteID = quoteID;
this.bidOrOffer = bidOrOffer;
this.price = price;
this.volume = volume;
createDate = new Date();
}
@Override
public int hashCode() {
int hash = 5;
hash = 13 * hash + Objects.hashCode(this.quoteID);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Data other = (Data) obj;
if (!Objects.equals(this.quoteID, other.quoteID)) {
return false;
}
return true;
}
}
然后我将一些元素按特殊顺序放入 TreeSet
Comparator<Data> offerOrder = (Data o1, Data o2) -> {
if(o1.equals(o2))
return 0;
if(o1.getPrice() == o2.getPrice()
&& o1.getVolume() == o2.getVolume()){
return o1.getCreateDate().after(o2.getCreateDate())? 1:-1;
}
if(o1.getPrice() == o2.getPrice()){
return o1.getVolume() > o2.getVolume()? 1:-1;
}
if(o1.getPrice() > o2.getPrice())
return 1;
else
return -1;
};
Set<Data> treeSet = new TreeSet<>(offerOrder);
treeSet.add(new Data("Q1", "OFFER", 1.32f, 1000000));
treeSet.add(new Data("Q6", "OFFER", 1.32f, 1000000));
treeSet.add(new Data("Q7", "OFFER", 1.33f, 200000));
此任务的主要目标是通过 quoteID
删除和更新一些数据
但如果我这样做
treeSet.contains(new Data("Q7", "OFFER", 0, 0)); //return false
此后方法 remove 也不起作用。
有什么想法吗?
最佳答案
插入“Q7”时,比较器返回 1 以与“Q1”进行比较。
如果您现在想要使用 new Data("Q7", "OFFER", 0, 0)
删除“Q7”,比较器将返回 -1。
所以树的“错误”路径的 child 接下来进行比较。
treeSet.contains(new Data("Q7", "OFFER", 2, 0))
将返回 true(与“Q1”返回 1 相比)。
关于java - 如何删除和更新 TreeSet 中的已排序元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42783768/