java - 如何删除和更新 TreeSet 中的已排序元素?

标签 java collections set comparator

我有一些实体类

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/

相关文章:

java - Java 8 Streams Filter 和 Collect 是否返回对列表中相同对象的引用?

java - 实例化后,列表可以以某种方式分配给另一个类的列表吗?

Python:从集合中检索项目

java - Gson 接听电话不起作用

java - 用Java计算两个BigIntegers的指数(实现社会主义百万富翁)

java - 使用 Play Framework 调用带有日期的 Controller 方法

java - 管理java列表对象并迭代它们

Java 泛型 : How to create a to-n collection with configurable value holder type

c++ - 将多个集合元素合并到一个集合中

scala - 将 java.util.Set 转换为 scala.collection.Set