我有两个与我想要比较的相同类型对象的集合.在这种情况下,我想基于不考虑equals()对象的属性来比较它们.在我的例子中,我使用名称的排名集合,例如:
public class Name {
private String name;
private int weightedRank;
//getters & setters
@Override
public boolean equals(Object obj) {
return this.name.equals(obj.name); //Naive implementation just to show
//equals is based on the name field.
}
}
Run Code Online (Sandbox Code Playgroud)
我想比较两个集合来断言,对于i每个集合weightedRank中的位置,该位置的每个名称都是相同的值.我做了一些谷歌搜索,但没有在Commons Collections或任何其他API中找到合适的方法,所以我想出了以下内容:
public <T> boolean comparatorEquals(Collection<T> col1, Collection<T> col2,
Comparator<T> c)
{
if (col1 == null)
return col2 == null;
if (col2 == null)
return false;
if (col1.size() != col2.size())
return false;
Iterator<T> i1 = col1.iterator(), i2 …Run Code Online (Sandbox Code Playgroud) 我不明白Javadoc:
The natural ordering for a class C is said to be consistent with equals if and only if
(e1.compareTo((Object)e2) == 0) has the same boolean value as e1.equals((Object)e2) for
every e1 and e2 of class C.
Run Code Online (Sandbox Code Playgroud)
为什么要那样?
我知道e1.equals(e2)= true应该始终意味着e1.compareTo(e2)== 0,但我无法理解为什么相反应该是真的.比较不平等!2个相等的对象应该与零进行比较,但是如果排序标准与它们的情况不相关,则2个不同的对象应该能够比较0.我的意思是,让不同的对象等于不正确,但不同的对象与0比较为什么不呢?
编辑:后来它表示强烈建议一致性,因为一些兼容性问题,因此问题
我想知道如何覆盖indexOf()子类中的方法ArrayList.我需要使用与私有瞬态elementData var 相同的访问权限.
我该如何解决我的设计?
编辑:它是否是一个有效的解决方案,将对elementData [i]的调用更改为类似的this.get(i)(实际上是允许的?).它会破坏或破坏逻辑吗?
collections ×3
java ×3
comparator ×2
equals ×2
arraylist ×1
comparable ×1
extend ×1
overriding ×1