Como o método contains () de um ArrayList avalia objetos?

Digamos que eu crie um objeto e o adicione ao meuArrayList. Se eu criar outro objeto com exatamente a mesma entrada do construtor, ocontains() método avaliar os dois objetos para ser o mesmo? Suponha que o construtor não faça nada de engraçado com a entrada e as variáveis armazenadas nos dois objetos são idênticas.

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;
    }
}

É assim que oclass&nbsp;deve ser implementado para tercontains()&nbsp;Retornatrue?