微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有任何排序集不允许添加等于元素并按预定义的合并器对它们进行排序?

如何解决是否有任何排序集不允许添加等于元素并按预定义的合并器对它们进行排序?

我需要一个集合,该集合将无法保持元素之间的 equals(),而且,它们必须随时通过预定义的比较器在这样的集合中进行排序

例如:

public static class Token {
    public Long id;
    public String valueForCompare;

    public Token(Long id,String valueForCompare) {
        this.id = id;
        this.valueForCompare = valueForCompare;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Token token = (Token) o;
        return Objects.equals(id,token.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

@Test
public void test() {
    Set<Token> tokens = new SomeSetThatIAskFor<>();
    tokens.add(new Token(1L,"first token"));
    tokens.add(new Token(2L,"second token"));

    Assert.assertEquals(tokens.size(),2);

    tokens.add(new Token(2L,"third token"));

    Assert.assertEquals(tokens.size(),2);
    Assert.assertEquals(
            tokens.get(new Token(2L,"no_matter_to_get_from_collection_value")).valueForCompare,"second token");

    tokens.add(new Token(3L,3);
    Assert.assertEquals(
            tokens.get(new Token(3L,"third token");
}

所以,我需要 tokens 包含所有时间排序的所有元素

同时,我需要,tokens 不包含与其他元素 equals() 的任何元素

如果我使用 TreeSet,那么我不能添加两个元素,compare 返回 0,并且它们不相等,那么它也会删除它们

我需要集合,其中每个元素的相等性equals() 方法定义,元素顺序由 compare() 方法定义

是否有现有的集合,或者我必须自己定义它?

(请举例回答)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。