相关疑难解决方法(0)

使用Comparator而不是equals()比较两个Java集合

问题陈述

我有两个与我想要比较的相同类型对象的集合.在这种情况下,我想基于不考虑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)

java collections equals comparator

18
推荐指数
3
解决办法
2万
查看次数

比较器中的equals()vs compareTo()/能(理论)

我不明白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比较为什么不呢?

编辑:后来它表示强烈建议一致性,因为一些兼容性问题,因此问题

java collections equals comparable comparator

3
推荐指数
1
解决办法
557
查看次数

我想扩展ArrayList来实现但无法访问elementData private var

我想知道如何覆盖indexOf()子类中的方法ArrayList.我需要使用与私有瞬态elementData var 相同的访问权限.

我该如何解决我的设计?

编辑:它是否是一个有效的解决方案,将对elementData [i]的调用更改为类似的this.get(i)(实际上是允许的?).它会破坏或破坏逻辑吗?

java collections overriding arraylist extend

0
推荐指数
1
解决办法
182
查看次数