问题描述
我需要一个集合,该集合将无法保持元素之间的 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 (将#修改为@)