You are assuming that all the objects have an equals method defined? (this assumption is ok, I just want to state it.) You may run into trouble if the collections contain duplicates. For example if collection a is [X,X,Y] and collection b is [X,Y,Y], your code will not catch the difference. If the collections can't contain duplicates, the second check for containsAll is redundant.