ArrayList 的 contains() 方法如何计算对象?

2022-08-31 05:01:43

假设我创建了一个对象并将其添加到我的.如果我随后使用完全相同的构造函数输入创建另一个对象,该方法会将这两个对象计算为相同吗?假设构造函数对输入不做任何有趣的事情,并且存储在两个对象中的变量是相同的。ArrayListcontains()

ArrayList<Thing> basket = new ArrayList<Thing>();  
Thing thing = new Thing(100);  
basket.add(thing);  
Thing another = new Thing(100);  
basket.contains(another); // true or false?

class Thing {  
    public int value;  

    public Thing (int x) {
        value = x;
    }

    equals (Thing x) {
        if (x.value == value) return true;
        return false;
    }
}

这是应该如何实现才能有回报吗?classcontains()true


答案 1

数组列出列表接口。implements

如果您查看该方法的Javadoc for List,您将看到它使用该方法来评估两个对象是否相同。containsequals()


答案 2

我认为正确的实现应该是

public class Thing
{
    public int value;  

    public Thing (int x)
    {
        this.value = x;
    }

    @Override
    public boolean equals(Object object)
    {
        boolean sameSame = false;

        if (object != null && object instanceof Thing)
        {
            sameSame = this.value == ((Thing) object).value;
        }

        return sameSame;
    }
}