Is there a use case for calling set without calling push? If not, I'd make set private to make the interface a little less error prone.