ArrayList use equals() in its contains method to see if provide object equals any item in the list as the document say: 
Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)). see this
I have this class
class Foo
{
  private String value;
  public Foo(String value)
  {
    this.value = value;
  }
  @Override
  public boolean equals(Object o)
  {
    return o == null ? this.value == null : o.toString().equals(this.value);
  }
}
I want to use contains method to check if item exists like this
List<Foo> list = new ArrayList<Foo>();
Foo item1 = new Foo("item1");
Foo item2 = new Foo("item2");
list.add(item1);
list.add(item2);
System.out.println(item1.equals("item1"));       //return true
System.out.println(list.contains("item1"));      //false !! why?!
but contains method return false , while item1.equals("item1") return true. 
why contains return false when it use equals method for provided object
 
     
     
     
     
     
     
    