With hasItem
, the iterable needs to have at least one item which matches the parameter matcher. In addition, it can have more items (matching or not), in any order. (The matcher is tried on each element until one of them matches, the rest is ignored.)
With contains
, the iterable needs to have exactly the item (or items) which are matched by the parameter (or parameters), in the same order, and no others. (I.e. the first item needs to match the first parameter matcher, the second item the second parameter matcher, ... and the last item the last parameter matcher. Each matcher is tried on just one element.)
With just one parameter, this means the iterable needs to have exactly one element.