.Метод Contains () не вызывает метод Overridden equals

У меня проблема, когда я создаю ArrayList из объектов Foo, я переопределяю метод equals и не могу получить метод contains для вызова метода equals. Я пробовал переопределить равно и хэш-код вместе, но это все еще не работает. Я уверен, что есть логическое объяснение тому, почему это так, но я не могу понять это в данный момент на собственном лол. Мне просто нужен способ узнать, содержит ли список указанный идентификатор.

Вот код:

import java.util.ArrayList;
import java.util.List;

public class Foo {

    private String id;


    public static void main(String... args){
        Foo a = new Foo("ID1");
        Foo b = new Foo("ID2");
        Foo c = new Foo("ID3");
        List<Foo> fooList = new ArrayList<Foo>();
        fooList.add(a);
        fooList.add(b);
        fooList.add(c);
        System.out.println(fooList.contains("ID1"));
        System.out.println(fooList.contains("ID2"));
        System.out.println(fooList.contains("ID5"));
    }   

    public Foo(String id){
        this.id = id;
    }

    @Override
    public boolean equals(Object o){
        if(o instanceof String){
            String toCompare = (String) o;
            return id.equals(toCompare);
        }
        return false;
    }



    @Override
    public int hashCode(){
        return 1;
    }
}

ВЫВОД: ложный ложный ложь

27
задан Reid Mac 16 February 2012 в 21:01
поделиться