1

我被困在数据结构类的 java 分配的一个组件上,这使我无法完成其余部分。这是一个简单的概念,但我在实现中遗漏了一些东西。我有一个Dynamic array被叫list1,我需要将它与另一个列表(list2)进行比较。我有一个方法:equals(Object a)所以调用是list1.equals(list2);

我知道如何将列表与迭代器进行比较,但如何引用list1Object 来比较两者?

我不是要求你完成我的任务,只是帮助我了解这将如何工作。

public static void main(String args[]) 
    {
        DynamicArrayOfInts list1 = new DynamicArrayOfInts();        

    }   
    public DynamicArrayOfInts() 
    {
      storage = new int[INITIAL_CAPACITY]; 
      size = 0;
    }
    public boolean equals(Object aThat) 
    { 
        if(aThat.equals(storage))
            return true;
        else    
            return false;
    } 
4

3 回答 3

2

你应该这样做:

public boolean equals(Object obj)
{
    if(obj == null) return false;
    if(obj.getClass() != DynamicArrayOfInts.class) return false;

    DynamicArrayOfInts other = (DynamicArrayOfInts) obj;

    /*compare this.storage to other.storage with the iterator
    or with simple indexing.*/
}
于 2012-09-22T17:32:37.207 回答
1

我认为您是在说您在equals方法内部进行比较。如果是这样,您需要将参数a转换为列表。所以

public boolean equals(Object a) {
    MyList list1 = (MyList) a; 
    ...
}

该行的MyList list1 = (MyList) a意思是“将引用a视为对 的实例的引用MyList,并将其分配给引用list1

equals通常需要一个Object,因此您可以(几乎)将任何内容传递给equals. 根据具体情况,您可以做的第一件事是检查参数的类型,equals如果没有机会相等则返回 false。

看看我在中间管上找到的这个例子。你在他们的例子中看到的第一件事是

if ( this == aThat ) return true;
if ( !(aThat instanceof Car) ) return false;

如果比较是微不足道的,这样做可以让您快速返回。例如,实例等于自身是重言式;没有办法不可能是真的。

于 2012-09-22T17:31:43.967 回答
1

在 equals 方法中,您使用this运算符来访问 list1 来代替 nae list1

于 2012-09-22T17:34:34.253 回答