Java sempre substitui o HashCode quando a substituição é igual
Recentemente, aprendi o conhecimento básico de Java. Quando encontro a cobertura do Java, sempre tenho muitas perguntas quando tenho que substituir o HashCode. Depois de discutir diretamente com meus colegas e consultar as informações on -line, resolverei aqui para ajudar todos a entender e há instruções no código.
Código de implementação específico:
pacote cn.xf.cp.ch02.Item9; importar java.util.hashmap; importar java.util.map; public class PhoneNumber {private final curto. Prefixo final final privado; LenNum de linho curto final privado; public PhoneNumber (Int AreaCode, Int Prefix, Int LineNumber) {Rangecheck (AreaCode, 999, "Código da área"); Rangecheck (prefixo, 999, "prefixo"); Rangecheck (linho, 9999, "Número da linha"); this.areacode = (curto) AreaCode; this.prefix = (curto) prefixo; this.lineNENumber = (curto) linho; } private estático void rangecheck (int arg, int max, nome da string) {if (arg <0 || arg> max) jogue novo ilegalArgumentException (nome + ":" + arg); } @Override public boolean é igual (objeto o) {if (o == this) retorna true; if (! (o instanceof PhoneNumber)) retorne false; PhoneNumber PN = (PhoneNumber) O; return pn.LineNumber == lineNumber && pn.prefix == prefix && pn.areacode == AreaCode; } /* @Override // Quanto ao por que 31 é usado, esse é o valor recomendado. Estudos mostraram que esse número tem um desempenho melhor quando usado public int hashCode () {int resultado = 17; resultado = 31 * resultado + áreacode; resultado = 31 * resultado + prefixo; resultado = 31 * resultado + linho; resultado de retorno; } */// Se um objeto não mudar com frequência e tiver uma sobrecarga alta, considere o cache do código de hash dentro das variáveis do objeto // modificado com volátil, o encadeamento lerá o valor mais modificado da variável toda vez que usa a variável. private volátil int hashcode; @Override public int hashCode () {int resultado = hashCode; if (resultado == 0) {resultado = 17; resultado = 31 * resultado + áreacode; resultado = 31 * resultado + prefixo; resultado = 31 * resultado + linho; hashcode = resultado; } resultado de retorno; } public static void main (string [] args) {map <phoneNumber, string> m = novo hashmap <phoneNumber, string> (); M.put (novo PhoneNumber (707, 867, 5309), "Jenny"); // Jenny não será devolvido aqui, ele retornará nulo, porque eles colocam objetos em diferentes system de hash buckes.out.println (m.get (novo PhoneNumber (707, 867, 5309))); }}Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!