рдЬреЛрдХрд░ рдкрд╣реЗрд▓реА 2018



рдЕрд▓реЛрд╣рд╛!

рддреЛ рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдЯреНрдЯрд░ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ - рдЬреЛрдХрд░ 2018, рдЬреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХреНрд╕рдкреЛрдлреЛрд░рдо рдореЗрдВ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрд╖ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╕рдВрдЦреНрдпрд╛ рдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛ред Odnoklassniki рдиреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЧреИрд░-рддреБрдЪреНрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЙрдЪреНрдЪ рддрдХрдиреАрдХреА рдЬрд╛рд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрдирд╛рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред

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

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

Deduplikator


рд╕рд┐рд░рд┐рд▓ equals() рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдШрдЯрд╛рдХрд░ рд╕реНрдореГрддрд┐ рдХреЛ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрд╕реЗ String.intern рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдбрдбрдЕрдк рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

 public static Object dedup(Object obj) { } 

рдирд┐рд░реНрдгрдп
рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рдкреАрдЫреЗ рдЦрд░реЛрдВрдЪ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд░рд┐рд▓ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рдЧрд▓рдд рдереЗред рдлрд┐рд░, java.util.concurrent рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдирд╛рдХ рдФрд░ рдЧреЛрджреА рдХреЛ computeIfAbsent рд╣реБрдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрджреНрднреБрдд computeIfAbsent рд╡рд┐рдзрд┐ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рджрд┐рдП рдЧрдП рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧреА рдпрджрд┐ Map рдореЗрдВ рдХреЛрдИ рдХреБрдВрдЬреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦреЗрдВ рдФрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдХреБрдВрдЬреА рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд▓реИрдореНрдмреНрдбрд╛ рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд░рд┐рд▓ рдиреЗ рдХрд╣рд╛, ConcurrentHashMap рдпрд╣ рд╡рд┐рдзрд┐ рдкрд░рдорд╛рдгреБ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрд╣реБрдд рд╣реА рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╕рдВрддреБрд╖реНрдЯ рд╕рд┐рд░рд┐рд▓ рдиреЗ рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ:

 private static final ConcurrentHashMap map = new ConcurrentHashMap(); public static Object dedup(Object obj) { return map.computeIfAbsent(obj, o -> o); } 

рдФрд░ рдЦрд╝реБрд╢реА рд╕реЗ рдЕрдкрдиреА рдирд╛рдХ рдлрд┐рд░ рд╕реЗ рдЦреБрдЬрд▓рд╛рдпрд╛ред

рдЖрдИрдкреА тАЛтАЛрдПрдбреНрд░реЗрд╕


Dima рдПрдХ рдирдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред IPv4 рдкрддреЗ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░реЗрдВред

 String ipToString(byte[] ip) { return ip[0] + '.' + ip[1] + '.' + ip[2] + '.' + ip[3]; } 

рдирд┐рд░реНрдгрдп
рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рддреБрд░рдВрдд рдЖрдИрдбреАрдИ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдИ рдЧрдИ рдереА, рдЬрд┐рд╕рд╕реЗ рдбрд╛рдпрдорд╛ рдХреЛ рднреА рд╡рд┐рдзрд┐ рдХреЛ рдЕрдВрдд рддрдХ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреАрдХ '.' рдкреНрд░рдХрд╛рд░ char рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреА рдЬрдЧрд╣ '.' "." , Dima рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдирд╛ рдЦреБрд╢ рдерд╛ рдХрд┐ рдЙрд╕рдиреЗ рддреБрд░рдВрдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред "рдЖрдп-рдЖрд╣-рдЖрд╣, рджреАрдорд╛", рдЬреЗрд╡реАрдПрдо рдиреЗ рд╕реЛрдЪрд╛ рдФрд░ рдЖрдИрдкреА рдкрддреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдмрдХрд╡рд╛рд╕ рджрд┐рдпрд╛ред Dima рдХреЗ рд╡рд┐рдкрд░реАрдд, JVM рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ, byte рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд 127 рд╕реЗ рдЕрдзрд┐рдХ рдСрдХреНрдЯреЗрдЯ рд╡рд╛рд▓реЗ рд╕рднреА рдкрддреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ int рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛, рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдЪрд┐рдиреНрд╣ рдореВрд▓ рдмрд╛рдЗрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЖрд╣, рджрд┐рдорд┐рддреНрд░реА, рд╕рд╛рдЗрди рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд╛рдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:

 return (ip[0] & 255) + "." + (ip[1] & 255) + "." + (ip[2] & 255) + "." + (ip[3] & 255); 


Spiskomeshalka


рдорд░реАрдирд╛ рдХреЛ рд╕реВрдЪреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдорд┐рд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреБрдХреНрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВрдЧреЗ?

 Random random = ThreadLocalRandom.current(); list.sort((o1, o2) -> { return random.nextBoolean() ? +1 : -1; }); 

рдирд┐рд░реНрдгрдп
рдорд░реАрдирд╛, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рднреВрд▓ рдЧрдП рдХрд┐ Comparator рдЕрдиреБрдмрдВрдз рдХреЛ рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рджреЛ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп, рддреБрд▓рдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдорд░реАрдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╕рдЦреНрддреА рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИ, рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрд╡рд╛рдж java.lang.IllegalArgumentException: Comparison method violates its general contract рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ java.lang.IllegalArgumentException: Comparison method violates its general contract ! рдпрджрд┐ рдорд░реАрдирд╛ рд╢рд╛рдо рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝рддреА рд╣реИ, рддреЛ рд╡рд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ Collections.shuffle() рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЙрддреНрддрд░: рддреБрд▓рдирд┐рддреНрд░ рдЕрдиреБрдмрдВрдз рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЫрдВрдЯрдиреА рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред Collections.shuffle() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдлрдВрдХреНрд╢рдирд▓ рдиреЗрдЯрд┐рд╡рд┐рдЯреА рд╕реАрди


Egor рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдорд╛рди рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХрд┐рддрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдпрджрд┐ 10 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдПрдХ ArrayList рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

 Predicate<String> equalsAny(List<String> list) { Predicate<String> p = s -> false; for (String s : list) { p = p.or(s::contains); } return p; } 

рдирд┐рд░реНрдгрдп
рдпреЗрдЧреЛрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкрд╛рдВрдбрд┐рддреНрдп рдПрд▓рд┐рдирд╛ рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдУрд╡рд░рд╣реЗрдб рд▓рд╛рдЧрддреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди

p = p.or(s::contains);

рдпрд╣ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ: рдПрдХ p.or() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдФрд░ рджреВрд╕рд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП s::contains рд╡рд┐рдзреЗрдп s::contains рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ 20 рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рдЫрд┐рдкрд╛ рд╣реБрдЖ Iterator рднреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ JIT рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред "20 рдпрд╛ 21 рд╡рд╕реНрддреБрдУрдВ, рдЕрдЧрд░ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВ, рдПрдХ рдкрд╛рдкреА рд╣реИ," рдЕрд▓реАрдирд╛ рдиреЗ рд╕реЛрдЪрд╛ред

рдЙрддреНрддрд░: 10 рд╡рд┐рдзреЗрдп or + 10 рд╡рд┐рдзреЗрдпрдХреЛрдВ contains JIT рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ + 1 Iterator contains ред

рдореИрдХреНрд╕рд┐рдо рдЕрдзрд┐рдХрддрдо рдкрд░ рдЬрд╛рддрд╛ рд╣реИ


рдореИрдХреНрд╕рд┐рдо рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрд╛рд▓реЗ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЙрд╕реЗ рдЧрд▓рддреА рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред

 AtomicLong max = new AtomicLong(); void addValue(long v) { if (v > max.get()) { max.set(v); } } 

рдирд┐рд░реНрдгрдп
рдУрд╣, рдореИрдХреНрд╕рд┐рдо! AtomicLong рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди AtomicLong.compareAndSwap ред рдФрд░ рдЬрд╛рд╡рд╛ 8 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдХреИрд╕ рдЪрдХреНрд░ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрджреНрднреБрдд рдкрд░рдорд╛рдгреБ рдкрджреНрдзрддрд┐ accumulateAndGet ред рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

 void addValue(long v) { max.accumulateAndGet(v, Math::max); } 

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


All Articles