using self.size rather than len(self.keys)