This is because you break the symmetry as specified in the contract equals() : if any event equals "item"( which is a string ), "item"it must also be equal to any event.
, , Java, indexOf("item") , .
indexOf() , , ArrayList (. ):
for (int i = 0; i < size; i++)
if ("item".equals(elementData[i]))
return i;
String equals(), , , , , false.
, Event , :
events.contains( new Event("item", "title", "desc") )
, .