obey the contract by TreeSet for comparing