рдЬрд╛рд╡рд╛ рдЪреИрд▓реЗрдВрдЬрд░реНрд╕ # 4: рдмрд░рд╛рдмрд░реА рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ () рдФрд░ рд╣реИрд╢рдХреЛрдб ()

рдЬрд╛рд╡рд╛ рдЪреИрд▓реЗрдВрдЬрд░реНрд╕ # 4: рдмрд░рд╛рдмрд░реА рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ () рдФрд░ рд╣реИрд╢рдХреЛрдб ()


рдкрд╛рдареНрдпрдХреНрд░рдо "рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░" рдкрд░ рдПрдХ рдирдП рдзрд╛рдЧреЗ рдХреЗ рд▓реЙрдиреНрдЪ рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ , рд╣рдо рдЬрд╛рд╡рд╛ рдЪреИрд▓реЗрдВрдЬрд░реНрд╕ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд┐рдЫрд▓реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!


рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп hashCode() рдФрд░ hashCode() рддрд░реАрдХреЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдмрд░рд╛рдмрд░-hashCode


рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП equals() рдФрд░ hashCode() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП рдмрд╣реБрдд рд╕рд╛рд░реЗ " if " рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛрдб рдХреЛ рднреНрд░рдорд┐рдд рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдпреЗ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рд╕реБрд╕рдВрдЧрдд рдХреЛрдб рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред


рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ ред


рд╕рдорддреБрд▓реНрдп рдмрд░рд╛рдмрд░ () рдФрд░ рд╣реИрд╢рдХреЛрдб ()


рдореЗрдердб рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдПрдХ рдРрд╕реА рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ (рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд) рд╣реЛрддрд╛ рд╣реИ ( рдЬрд╛рд╡рд╛ рдЪреИрд▓реЗрдВрдЬрд░реНрд╕ # 3 рджреЗрдЦреЗрдВ: рдмрд╣реБрд░реВрдкрддрд╛ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд , рдЗрдВрдЬреАред )ред рдЬрд╛рд╡рд╛ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ equals() рдФрд░ hashCode() рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ equals() рдХрд╛ рдкреБрдирд░реНрдкрд░рд┐рд╡рд░реНрддрди equals() рдФрд░ hashCode() рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рд╣рдо рдЬрд╛рд╡рд╛ рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Object рд╡рд░реНрдЧ рдХреЗ equals() рд╡рд┐рдзрд┐ рд╣реИред рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдкрд╛рд╕ рдХреА рдЧрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдЬрд╛рдБрдЪрддреА рд╣реИред


 public boolean equals(Object obj) { return (this == obj); } 

рдЕрдм Object рдХреНрд▓рд╛рд╕ рдореЗрдВ hashCode() рдкрджреНрдзрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред


 @HotSpotIntrinsicCandidate public native int hashCode(); 

рдпрд╣ рдореВрд▓ рд╣реИ - рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ C, рдФрд░ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИред (рдпрджрд┐ рдЖрдк JDK рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред)
рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ: рдкрддреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рдореВрд▓реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ ( vladimir_dolzhenko рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж )ред рд╣реЙрдЯрд╕реНрдкреЙрдЯ JVM рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣реЙрдЯрд╕реНрдкреЙрдЯ рдХреЗ рд▓рд┐рдП рд╣реИрд╢рдХреЛрдб () рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред


рдпрджрд┐ equals() рдФрд░ hashCode() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд Object рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд┐рдзрд┐рдпрд╛рдБ equals() рдФрд░ hashCode() рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╣реА рд░рд╛рдЬреНрдп рд╣реИред


рдЖрдорддреМрд░ рдкрд░, рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ equals() рднреА hashCode() рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред


рдмрд░рд╛рдмрд░реА рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ ()


equals() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдорд╛рди рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, equals() рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ:


 public class EqualsAndHashCodeExample { public static void main(String... args){ System.out.println(new Simpson("Homer", 35, 120) .equals(new Simpson("Homer",35,120))); System.out.println(new Simpson("Bart", 10, 120) .equals(new Simpson("El Barto", 10, 45))); System.out.println(new Simpson("Lisa", 54, 60) .equals(new Object())); } static class Simpson { private String name; private int age; private int weight; public Simpson(String name, int age, int weight) { this.name = name; this.age = age; this.weight = weight; } @Override public boolean equals(Object o) { // 1 if (this == o) { return true; } // 2 if (o == null || getClass() != o.getClass()) { return false; } // 3 Simpson simpson = (Simpson) o; return age == simpson.age && weight == simpson.weight && name.equals(simpson.name); } } } 

рдЖрдЗрдП equals() рдкрджреНрдзрддрд┐ рдХреЛ рджреЗрдЦреЗрдВред рдкрд╣рд▓реА рддреБрд▓рдирд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП o рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рд╣реИ, рддреЛ equals() true рд▓реМрдЯреЗрдЧреАред


рджреВрд╕рд░реА рддреБрд▓рдирд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд╕ рдХреА рд╡рд╕реНрддреБ null рдФрд░ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИред рдпрджрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╡рд╕реНрддреБ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИ, рддреЛ рд╡рд╕реНрддреБрдПрдВ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред


рдЕрдВрдд рдореЗрдВ, equals() рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдорд╛рди рд╕рдорд╛рди рд╣реИ, рддреЛ рд╡рд╕реНрддреБрдПрдВ рд╕рдорд╛рди рд╣реИрдВред


рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рдЕрдм рдЖрдЗрдП main() рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рджреЗрдЦреЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рджреЛ Simpson рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ:


 System.out.println( new Simpson("Homer", 35, 120).equals( new Simpson("Homer", 35, 120))); 

рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдореВрд▓реНрдп рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо true рд╣реЛрдЧрд╛ред


рдлрд┐рд░ рджреЛ Simpson рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:


 System.out.println( new Simpson("Bart", 10, 45).equals( new Simpson("El Barto", 10, 45))); 

рдпрд╣рд╛рдБ рд╡рд╕реНрддреБрдПрдВ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирд╛рдореЛрдВ рдХреЗ рдЕрд░реНрде рдЕрд▓рдЧ рд╣реИрдВ: рдмрд╛рд░реНрдЯ рдФрд░ рдПрд▓ рдмрд╛рд░реНрдЯреЛ ред рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо false рд╣реЛрдЧрд╛ред


рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП Simpson рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ Object рдХреНрд▓рд╛рд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:


 System.out.println( new Simpson("Lisa", 54, 60).equals( new Object())); 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо false рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВред


рдмрд░рд╛рдмрд░ () рдмрдирд╛рдо ==


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ == рдСрдкрд░реЗрдЯрд░ рдФрд░ equals() рд╡рд┐рдзрд┐ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред == рдСрдкрд░реЗрдЯрд░ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рджреЛ рд▓рд┐рдВрдХ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 Simpson homer = new Simpson("Homer", 35, 120); Simpson homer2 = new Simpson("Homer", 35, 120); System.out.println(homer == homer2); 

рд╣рдордиреЗ new рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Simpson рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПред рдЗрд╕рд▓рд┐рдП, рдЪрд░ homer рдФрд░ homer рдвреЗрд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо false ред


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдУрд╡рд░рд░рд╛рдЗрдб equals() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 System.out.println(homer.equals(homer2)); 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦреЗрддреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЪреВрдВрдХрд┐ рджреЛрдиреЛрдВ Simpson рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕рдорд╛рди рдлрд╝реАрд▓реНрдб рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо true рд╣реЛрдЧрд╛ред


рд╣реИрд╢рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреА рдкрд╣рдЪрд╛рди ()


рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, hashCode() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред hashCode() рд╡рд┐рдзрд┐ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред


рдпрджрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╣реИрд╢ рдХреЛрдб рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╣реИрд╢ рдХреЛрдб рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк equals() рд╡рд┐рдзрд┐ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: рдЖрдк рдмрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рд╣реИрд╢ рдХреЛрдб рд╕рдорд╛рди рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб рдорд╛рди рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред


hashCode() рд╕рд╛рде рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред


 public class HashcodeConcept { public static void main(String... args) { Simpson homer = new Simpson(1, "Homer"); Simpson bart = new Simpson(2, "Homer"); boolean isHashcodeEquals = homer.hashCode() == bart.hashCode(); if (isHashcodeEquals) { System.out.println("   equals."); } else { System.out.println("    equals, .. " + " ,  ,     ."); } } static class Simpson { int id; String name; public Simpson(int id, String name) { this.id = id; this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Simpson simpson = (Simpson) o; return id == simpson.id && name.equals(simpson.name); } @Override public int hashCode() { return id; } } } 

hashCode() рд╡рд┐рдзрд┐, рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИ, рд╡реИрдз рд╣реИ рд▓реЗрдХрд┐рди рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреБрд▓рдирд╛ рд╣рдореЗрд╢рд╛ true рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП equals() рдкрджреНрдзрддрд┐ рдХреЛ рд╣рдореЗрд╢рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред


рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдмрд░рд╛рдмрд░ () рдФрд░ рд╣реИрд╢рдХреЛрдб () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


Set рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ (рд╕реЗрдЯ) рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред рдиреАрдЪреЗ рдХреБрдЫ рд╡рд░реНрдЧ рд╣реИрдВ рдЬреЛ Set рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:



рдХреЗрд╡рд▓ рдЕрдирдиреНрдп рддрддреНрд╡реЛрдВ рдХреЛ Set рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HashSet , рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рддрддреНрд╡ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, equals() рдФрд░ hashCode() рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ equals() рдФрд░ hashCode() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддреЗ рд╣реИрдВред


рдЖрдЗрдП HashSet рдореЗрдВ add() рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрд╛рдЧ рдХреЛ рджреЗрдЦреЗрдВ:


 if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) break; p = e; 

рдПрдХ рдирдпрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, HashSet рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдЗрдЯрдо рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдореМрдЬреВрдж рд╣реИред рдпрджрд┐ рд╡рд╕реНрддреБ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рдирдпрд╛ рддрддреНрд╡ рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ред


equals() рдФрд░ hashCode() рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ Set рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рддрд░реАрдХреЗ HashMap , Hashtable рдФрд░ LinkedHashMap рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк "рд╣реИрд╢" рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП hashCode() рдФрд░ equals() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╕рдорд╛рди () рдФрд░ рд╣реИрд╢рдХреЛрдб () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ


рд╕рдорд╛рди рд╣реИрд╢ рдХреЛрдб рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП equals() рд╡рд┐рдзрд┐ рдЪрд▓рд╛рдПрдБред рдпрджрд┐ рд╣реИрд╢ рдХреЛрдб рдЕрд▓рдЧ рд╣реИ рддреЛ equals() рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рдХрд░реЗрдВ ред


рддрд╛рд▓рд┐рдХрд╛ 1. рд╣реИрд╢ рдХреЛрдб рддреБрд▓рдирд╛


рдЕрдЧрд░ рд╣реИрд╢рдХреЛрдб () рддреБрд▓рдирд╛ ...рдЗрд╕ ...
true рд▓реМрдЯрд╛рддрд╛ trueрдирд┐рд╖реНрдкрд╛рджрди рдХреЗ equals()
false рд▓реМрдЯрддрд╛ falseequals() рдЕрдорд▓ рдирд╣реАрдВ equals()

рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП Set рдпрд╛ Hash рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╡рд╕реНрддреБ рддреБрд▓рдирд╛ рдирд┐рдпрдо


рдЬрдм hashCode() рддреБрд▓рдирд╛ false equals() , рддреЛ equals() рд╡рд┐рдзрд┐ рднреА false рдЪрд╛рд╣рд┐рдП ред рдпрджрд┐ рд╣реИрд╢ рдХреЛрдб рдЕрд▓рдЧ рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред


рддрд╛рд▓рд┐рдХрд╛ 2. рд╣реИрд╢рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ ()


рдЬрдм hashCode() рддреБрд▓рдирд╛ рд░рд┐рдЯрд░реНрди ...equals() рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖрдиреА рдЪрд╛рд╣рд┐рдП ...
truetrue рдпрд╛ false
falsefalse

рдЬрдм рд╕рдорддреБрд▓реНрдп equals() рд╡рд┐рдзрд┐ true рдЬрд╛рддреА true , рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдПрдВ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣реИрд╢ рдХреЛрдб рддреБрд▓рдирд╛ рднреА рд╕рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


рддрд╛рд▓рд┐рдХрд╛ 3. рдмрд░рд╛рдмрд░реА рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ ()


рдЬрдм equals() рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ ...hashCode() рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖрдиреА рдЪрд╛рд╣рд┐рдП ...
truetrue
falsetrue рдпрд╛ false

рдмрд░рд╛рдмрд░реА рдкрд░ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░реЗрдВ () рдФрд░ рд╣реИрд╢рдХреЛрдб ()


рдпрд╣ рдЖрдкрдХреЗ equals() рдФрд░ hashCode() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЬреНрдЮрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдХрд╛рд░реНрдп рдХрдИ equals() рдФрд░ Set рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдХреБрд▓ рдЖрдХрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИред


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдзреНрдпрд╛рдирдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ:


 public class EqualsHashCodeChallenge { public static void main(String... args) { System.out.println(new Simpson("Bart").equals(new Simpson("Bart"))); Simpson overriddenHomer = new Simpson("Homer") { public int hashCode() { return (43 + 777) + 1; } }; System.out.println(new Simpson("Homer").equals(overriddenHomer)); Set set = new HashSet(Set.of(new Simpson("Homer"), new Simpson("Marge"))); set.add(new Simpson("Homer")); set.add(overriddenHomer); System.out.println(set.size()); } static class Simpson { String name; Simpson(String name) { this.name = name; } @Override public boolean equals(Object obj) { Simpson otherSimpson = (Simpson) obj; return this.name.equals(otherSimpson.name) && this.hashCode() == otherSimpson.hashCode(); } @Override public int hashCode() { return (43 + 777); } } } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ, рд╕реЛрдЪреЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдХреЛрдб рдХреЛ рд░рди рдХрд░реЗрдВред рд▓рдХреНрд╖реНрдп рдЕрдкрдиреЗ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреМрд╢рд▓ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рд╡рд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реАрдЦрдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХреЗрдВред


рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


 A) true true 4 B) true false 3 C) true false 2 D) false true 3 

рдХреНрдпрд╛ рд╣реБрдЖ? рдмрд░рд╛рдмрд░реА рд╕рдордЭрдирд╛ () рдФрд░ рд╣реИрд╢рдХреЛрдб ()


рдкрд╣рд▓реА рддреБрд▓рдирд╛ рдореЗрдВ, equals() рдХрд╛ рдкрд░рд┐рдгрд╛рдо true , рдХреНрдпреЛрдВрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ, рдФрд░ hashCode() рд╡рд┐рдзрд┐ рджреЛрдиреЛрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИред


рджреВрд╕рд░реА рддреБрд▓рдирд╛ рдореЗрдВ, hashCode() рдЪрд░ рдХреЗ рд▓рд┐рдП hashCode() рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреЛрдиреЛрдВ Simpson рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП, рдирд╛рдо "рд╣реЛрдорд░" рд╣реИ , рд▓реЗрдХрд┐рди overriddenHomer hashCode() рд╡рд┐рдзрд┐ рдПрдХ рдЕрд▓рдЧ рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, equals() рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо false рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣реИрд╢ рдХреЛрдб рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред


рдЖрдкрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рддреАрди Simpson рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдВрдЧреЗред рдЪрд▓рд┐рдП рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред


рд╕реЗрдЯ рдореЗрдВ рдкрд╣рд▓реА рд╡рд╕реНрддреБ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреА:


 new Simpson("Homer"); //  

рдирд┐рдореНрди рд╡рд╕реНрддреБ рдХреЛ рднреА рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкрд┐рдЫрд▓реА рд╡рд╕реНрддреБ рд╕реЗ рднрд┐рдиреНрди рдорд╛рди рд╣реЛрддрд╛ рд╣реИ:


 new Simpson("Marge"); //  

рдЕрдВрдд рдореЗрдВ, рдЕрдЧрд▓реЗ Simpson рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд╣рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдорд╛рди рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдореНрдорд┐рд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:


 set.add(new Simpson("Homer")); //   

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рдирд┐рдпрдорд┐рдд Simpson("Homer") рдЙрджрд╛рд╣рд░рдг Simpson("Homer") рд╡рд┐рдкрд░реАрдд overridenHomer рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдЕрд▓рдЧ рд╣реИрд╢ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЗрд╕ рдЖрдЗрдЯрдо рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛:


 set.add(overriddenHomer); //  

рдЬрд╡рд╛рдм рд╣реИ


рд╕рд╣реА рдЙрддреНрддрд░ рдмреА рд╣реИред рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реЛрдЧрд╛:


 true false 3 

рдмрд░рд╛рдмрд░ () рдФрд░ рд╣реИрд╢рдХреЛрдб () рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ


  • рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ hashCode() рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ equals() рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред
  • HashSet рдЬреИрд╕реЗ рд╣реИрд╢ рдХрд▓реЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ equals() рдФрд░ hashCode() рдХрд╛ рдЕрднрд╛рд╡ред
  • рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп hashCode() рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдирд┐рд░рдВрддрд░ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  • == рдФрд░ equals() рдЙрдкрдпреЛрдЧред == рдСрдкрд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ equals() рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреА рд╣реИред

рдЖрдкрдХреЛ рдмрд░рд╛рдмрд░ () рдФрд░ рд╣реИрд╢рдХреЛрдб () рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ


  • рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ POJO ( рд░реВрд╕реА , рдЕрдВрдЧреНрд░реЗрдЬреА ) рдореЗрдВ рд╕рдорддреБрд▓реНрдп ( equals() рдФрд░ hashCode() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред
  • рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрд╢ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • equals() рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрд╢рд╛ hashCode() рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВред
  • equals() рд╡рд┐рдзрд┐ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ (рдлрд╝реАрд▓реНрдб рд╕реЗ рдорд╛рди) рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
  • hashCode() рд╡рд┐рдзрд┐ POJO рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдЖрдИрдбреА) рд╣реЛ рд╕рдХрддреА рд╣реИред
  • рдпрджрд┐ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╣реИрд╢ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо false , рддреЛ equals() рд╡рд┐рдзрд┐ рднреА false рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
  • рдпрджрд┐ рд╣реИрд╢ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп equals() рдФрд░ hashCode() рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрддреНрд╡ рд╣реЛрдВрдЧреЗред

рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ



рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдЦреБрд▓реЗ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ 18 рдорд╛рд░реНрдЪ рдХреЛ рд╣рдорд╛рд░реЗ рд╢рд┐рдХреНрд╖рдХ рд╕рд░реНрдЧреЗрдИ рдкреЗрдЯреНрд░реЗрд▓реЗрд╡ рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Source: https://habr.com/ru/post/hi443710/


All Articles