рд╕рднреА рдкреИрдЪ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣ рдкреЛрд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреНрдпреВрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рдереЗред StringBuilder рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣рд╛рдБ рд╣реИ ред


рдпрд╣рд╛рдВ рд╣рдо рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢, рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреА рд╕рдордЭ рдореЗрдВ рдХрдореА рдХреЗ рдХрд╛рд░рдг рдХрдИ "рд╕реБрдзрд╛рд░" рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!


рдЬрдм рдХреБрдЫ рднреА рдореБрд╕реАрдмрдд рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред Collections.emptyList() ред Collections.emptyList() / Collections.emptyList() / Collections.emptyList() ред рдпреЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЦрд╛рд▓реА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред EmptyList рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦрддреЗ рд╣реБрдП EmptyList рд╣рдо рдпрд╣ рджреЗрдЦреЗрдВрдЧреЗ:


 private static class EmptyList<E> { public Iterator<E> iterator() { return emptyIterator(); } public Object[] toArray() { return new Object[0]; } } 

рд╕реБрдзрд╛рд░ рдХреА рдкреНрд░рдмрд▓ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рджреЗрдЦреЗрдВ? EmptyList.iterator() рд╡рд┐рдзрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рдкреБрдирд░рд╛рд╡рд░реНрддрдХ рд▓реМрдЯрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВ рдирд╣реАрдВ рдРрд░реЗ toArray() рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА EmptyList.iterator() ?


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

http://mail.openjdk.java.net/pipermail/core-libs-dev/2017-September/049170.html
http://hg.openjdk.java.net/jdk/jdk12/file/ffac5eabbf28/src/java.base/share/classes/java/util/List.java#l185


рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡рд┐рдзрд┐ рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЖрдк рдХрд╣реЗрдВрдЧреЗ: "рд╡рд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ! рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?"


рдХреЗрд╡рд▓ рдЕрдиреБрднрд╡реА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реА рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:


- рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреМрди?
- рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкреЙрд▓ рд╕реИрдВрдбреЛрдЬ рдФрд░ рдЯреИрдЧрд┐рд░ рд╡рд▓реЗрд╡

рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм

http://mail.openjdk.java.net/pipermail/core-libs-dev/2017-September/049171.html


рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рджреГрд╢реНрдпрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдИред рдЬреАред рд╕рд░рдгреА рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЕрд╡рд╛рдВрдЫрд┐рдд рд▓реЙрдХ рд╕рд╛рдЭрд╛рдХрд░рдг рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛: Arrays.asList () рд╕реЗ EMPTY_LIST рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ рд╕рд░рдгреА рдореЗрдВ рд╢реВрдиреНрдп рд▓рдВрдмрд╛рдИ рд╣реЛред рдЗрд╕реЗ рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рдордирд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ [1]ред

http://mail.openjdk.java.net/pipermail/core-libs-dev/2015-September/035197.html

рд╡реИрд╕реЗ, рд╢рд╛рдпрдж рдпрд╣ Arrays.asList рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реИ рддреЛ рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
 public static <T> List<T> asList(T... a) { if(a.length == 0) return Collections.emptyList(); return new ArrayList<>(a); } 


рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕реВрдЪреА рдХреНрдпреЛрдВ рдмрдирд╛рдПрдВ рдпрджрд┐ рдЖрдк рдореБрдлреНрдд рдореЗрдВ рдПрдХ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдРрд╕рд╛ рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓ Arrays.asList рд▓реМрдЯреА рд╕реВрдЪреА рдХреА рдкрд╣рдЪрд╛рди рдкрд░ рдХреЛрдИ рдЕрдбрд╝рдЪрди рдирд╣реАрдВ рд╣реИред рдорд╛рдЗрдХреНрд░реЛ-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╡рд╣ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд░реВрдк рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВред

рдпрд╣ рдХрдерди рд╢рд╛рдпрдж рдЖрдкрдХреЛ рд╣рддрдкреНрд░рдн рдХрд░ рджреЗрдЧрд╛:


рдИред рдЬреАред рд╕рд░рдгреА рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЕрд╡рд╛рдВрдЫрд┐рдд рд▓реЙрдХ рд╕рд╛рдЭрд╛рдХрд░рдг рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдХрд╣реЗрдВрдЧреЗ: "рдЙрдирдХреЗ рджрд╛рд╣рд┐рдиреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреМрди рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╕рд░рдгреА (!) рдкрд░ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (!)?"


рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ (рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рдЪреБрдХрд╛ рд╣реИ)ред рддрдм рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЛрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдмрджрд▓ рджреЗрдЧрд╛, рдФрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ рдПрдХ рдЯреВрдЯрдиреЗ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ (рдмрд╛рдж рдореЗрдВ рдЬрд╛рдПрдВ, рдЗрд╕реЗ рдкрдХрдбрд╝ рд▓реЗрдВ)ред рдЬреЛрдЦрд┐рдо рдЗрддрдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд▓рд╛рдн рдЗрддрдирд╛ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ, kmk рдкрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рднрд╛рд╖рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЧрд▓рддреА рдереАред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рдЦреБрдж рдХреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ рдЬрдм рдПрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБ рдХреЛ рдХрдИ рдмрд╛рд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдкрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЗрд╕ рдХрд▓реНрдкрд┐рдд рдХрд╣рд╛рдиреА рдХрд╛ рдиреИрддрд┐рдХ рдпрд╣ рд╣реИ: рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдЬрд╛рд╡рд╛ рдХреА рдкрд╡рд┐рддреНрд░ рдЧрд╛рдп рд╣реИрдВред рдЙрди рдкрд░ рдЕрддрд┐рдХреНрд░рдордг рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВ: рдЧрд╛рд░реНрдб рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд┐рдирд╛ рдЧреЛрд▓реА рдорд╛рд░рддрд╛ рд╣реИред


рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ...


JDK рдореЗрдВ рдХрдИ рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рд╕рд╛рде рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рддрд░реАрдХреЗ List.indexOf() рдФрд░ List.lastIndexOf() рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:


  • java.util.ArrayList
  • java.util.Arays $ ArrayList
  • java.util.Vector
  • java.util.concurrent.CopyOnWriteArrayList

рдЗрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХреЛрдб рд▓рдЧрднрдЧ рдПрдХ рд╕реЗ рдПрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЪреМрдЦрдЯреЗ рднреА рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:



рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд╡рд╛рд░рд╛ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдХрднреА-рдХрднреА рдХрднреА-рдХрднреА рдХрдИ рдмрд╛рд░), рдЬреЛ ReserverCodeCache рдореЗрдВ рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЬреЛ рдмрд╕ рд▓рдЧрднрдЧ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛ рд╕реЗ рдХрдХреНрд╖рд╛ рддрдХ рднрдЯрдХрддрд╛ рд╣реИред


рдбреЗрд╡рд▓рдкрд░реНрд╕, рдмрджрд▓реЗ рдореЗрдВ, рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдмрд╣реБрдд рд╢реМрдХ рд░рдЦрддреЗ рд╣реИрдВ


 int i = Arrays.asList(array).indexOf(obj); //  boolean contains = Arrays.asList(array).contains(obj); //    boolean contains = Arrays.stream(names).anyMatch(nm -> nm.equals(name)); 

рдореИрдВ рдЬреЗрдбреАрдХреЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдкреИрдЪ рджреЛ рдкреЗрдиреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рд╣реИ:


1) List.indexOf() рдФрд░ List.lastIndexOf() рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди java.util.Arrays
2) рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, Arrays.indexOf() рдФрд░ Arrays.lastIndexOf() рдХреНрд░рдорд╢рдГ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВ


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЗрдЦ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


- рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреМрди?
- рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдорд╛рд░реНрдЯрд┐рди рдмреБрдЪреЛрд▓рдЬрд╝ рдФрд░ рдкреЙрд▓ рд╕реИрдВрдбреЛрдЬрд╝

IMHO, рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рддрдирд╛ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА

рдорд╛рд░реНрдЯрд┐рди рдмреБрдЪреЛрд▓рдЬрд╝:


рд╕рд░реНрдЧреЗрдИ, рдореИрдВ рдЙрди рд╕рднреА рд╕рдВрдЧреНрд░рд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ Array.java рдореЗрдВ indexOf рддрд░реАрдХреЗ рднреА рдмрдирд╛рдП рд╣реИрдВред рд▓реЗрдХрд┐рди:

рдРрд░реЗ рдЖрдорддреМрд░ рдкрд░ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Arrays рдкрд░ рдХреЛрдИ рднреА рдирдИ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ (рдпрд╛, рдЬрд╣рд╛рдБ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╣реА! рдПрдХ рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!) рдкреНрд░рддрд┐рд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред

рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдирд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рдкрдЫрддрд╛рд╡рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП ArrayDeque рдЬреИрд╕реЗ рдирдП рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдФрд░ рд╡реИрд░рд┐рдПрдВрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХреА рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рд╣рдо рд╢реВрдиреНрдп-рдЖрдзрд╛рд░рд┐рдд рд╕реНрдЯрд╛рд░реНрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрд░реЗрд▓реЗрд▓рд┐рд╕реНрдЯ рд╣реЛрдиреЗ рдкрд░ рдкрдЫрддрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╣рд▓реЗ рджрд┐рди рд╕реЗ рд╣реА рдПрд░рд┐рдпрд░рдбреЗрдХ рдХреЗ рдкрд░рд┐рдкрддреНрд░ рд╕рд░рдгреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рд╕рд░рдгреА рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЬреНрдпрд╛рджрд╛ рдмрдЪрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдСрдлрд╝-рдмрд╛рдп-рд╡рди рдПрд░рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ Arrays API рдХреЗ рд▓рд┐рдП рднреА рд╕рд╣реА рд╣реИред

рдкреЙрд▓ рд╕реИрдВрдбреЛрдЬрд╝:


рдореИрдВ рдЗрддрдиреА рджреВрд░ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрдм рддрдХ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ "рджреЗрдЦрднрд╛рд▓ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реНрдкрд┐рди рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд╛рдВрдЯреЗрджрд╛рд░ рд╣реИрдВред 'ish рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рд╣рдо рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рддрд▓рдЫрдЯ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдкреНрд░рдЧрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

Arrays рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдирдпрд╛ рдкрд░рд┐рд╡рд░реНрдзрди рдХреБрдЫ рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрдо рд╕реЗ рдХрдо :-) рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдпрд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдХрдИ рдЕрдиреНрдп рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╡рд╛рд░реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде (рд╕рднреА рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдкреНрд▓рд╕ рд░реЗрдВрдЬ рд╡реЗрд░рд┐рдПрдВрдЯ) рднреА рдЖрдПрдВред рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рд╛рднрдХрд╛рд░реА рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд▓рд╛рдн рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдордЬрдмреВрдд рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдореА рдХреЛрдб рдХреИрд╢ рджрдмрд╛рд╡)ред

рдкреЙрд▓ред


рдкрддреНрд░рд╛рдЪрд╛рд░: http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-March/051968.html


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


ArrayList рдХреЗ рд▓рд┐рдП рд╕реБрдзрд╛рд░? рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ


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


рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди

рдирдЧреНрди рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рде, рдкреНрд░рд╕реНрддрд╛рд╡ рдмрд╣реБрдд, рдмрд╣реБрдд рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВ:


 @State(Scope.Benchmark) public class ArrayListBenchmark { @State(Scope.Benchmark) public static class Data { @Param({"10", "100", "1000", "10000"}) public int size; ArrayList<Integer> arrayRandom = new ArrayList<Integer>(size); @Setup(Level.Invocation) public void initArrayList() { Random rand = new Random(); rand.setSeed(System.currentTimeMillis()); // Populate the ArrayList with size-5 elements for (int i = 0; i < size - 5; i++) { Integer r = rand.nextInt() % 256; arrayRandom.add(r); } } } @Benchmark public ArrayList construct_new_array_list(Data d) { ArrayList al = new ArrayList(d.arrayRandom); // once a new ArrayList is created add a new element al.add(new Integer(900)); return al; } } 

рдкрд░рд┐рдгрд╛рдо:


 Benchmark (size) Mode Cnt Score Error Units  construct_new_array_list 10 thrpt 25 388.212 ┬▒ 23.110 ops/s construct_new_array_list 100 thrpt 25 90.208 ┬▒ 7.995 ops/s construct_new_array_list 1000 thrpt 25 23.289 ┬▒ 1.687 ops/s construct_new_array_list 10000 thrpt 25 7.659 ┬▒ 0.560 ops/s  construct_new_array_list 10 thrpt 25 562.678 ┬▒ 37.370 ops/s construct_new_array_list 100 thrpt 25 119.791 ┬▒ 13.232 ops/s construct_new_array_list 1000 thrpt 25 33.811 ┬▒ 3.812 ops/s construct_new_array_list 10000 thrpt 25 10.889 ┬▒ 0.564 ops/s 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рдкрдХрдбрд╝ рдирд╣реАрдВ рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ, рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ред рдЕрдм рдЙрдиреНрд╣реЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреИрдЪ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!


рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдпрд╣ рдерд╛

рдорд╛рд░реНрдЯрд┐рди рдмреБрдЪреЛрд▓рдЬрд╝:


рдпрд╣ рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо ArrayList -> ArrayList рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? ArrayDeque рдФрд░ CopyOnWriteArrayList рдХреЗ рдорди рдореЗрдВ рдЖрддреЗ рд╣реИрдВред
ArrayList рд╕рдВрдЧреНрд░рд╣ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд░реНрдЧ рд╣реИред рдЖрдк рдХрд╣рд╛рдБ рд░реБрдХрддреЗ рд╣реИрдВ?

ArrayList рдХрд╛ рдПрдХ рдкреИрдереЛрд▓реЙрдЬрд┐рдХрд▓ рдЙрдкрд╡рд░реНрдЧ рдЖрдЧрд╛рдореА рдЯреВрдЯрдиреЗ рдХреЗ рд╕рд╛рде, рдмреИрдХрд┐рдВрдЧ рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИред

рд╕реВрдЪреА рдХреЙрдкреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдзрдиреНрдп рд╕рдорд╛рдзрд╛рди рд╕рдВрднрд╡рддрдГ List.copyOf https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/List.html#cadOf(java рд╣реИ .util.Collection ) рд╡рд╣ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдПрд▓рди рдмреЗрдЯрдореИрди


ArrayList рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ elementData рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рд╣реЛред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрдЧ рдкрд╣рдЪрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдореБрдЭреЗ ArrayList рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ, рдФрд░ рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдлрд┐рд░ c instanceof ArrayList рд╕рдЪреНрдЪрд╛рдИ рд▓реМрдЯрд╛рдПрдЧрд╛, рд╣рдо рдХреЙрдкреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗред


рдЗрд╕ рдХрд▓реНрдкрд┐рдд рдХрд╣рд╛рдиреА рдХрд╛ рдиреИрддрд┐рдХ рдпрд╣ рд╣реИ: рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд┐рд╕реА рдХреЛ рднреА рд╕рдмрд╕реЗ рдмреЗрддреБрдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдФрд░ рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдпрджрд┐ ArrayList рдиреЗ рд╢реБрд░реВ рд╕реЗ рд╣реА final рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред


рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдлрд┐рд░ рд╕реЗ


рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдЧрд▓рддреА рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рдЪрдХреНрдХрд░ рдореЗрдВ рдкрдбрд╝ рдЧрдпрд╛ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд╛рдпрд╛:


 //      paramTypes for (Constructor<?> candidate : candidates) { Class<?>[] paramTypes = candidate.getParameterTypes(); if (constructorToUse != null && argsToUse != null && argsToUse.length > paramTypes.length) { // Already found greedy constructor that can be satisfied -> // do not look any further, there are only less greedy constructors left. break; } if (paramTypes.length < minNrOfArgs) { continue; } 

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, java.lang.reflect.Constructor.getParameterTypes() рдЕрдВрджрд░ рдЬрд╛рдХрд░ java.lang.reflect.Constructor.getParameterTypes() рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╕реБрдВрджрд░ рдкрд╛рдпрд╛:


 @Override public Class<?>[] getParameterTypes() { return parameterTypes.clone(); } /** * {@inheritDoc} * @since 1.8 */ public int getParameterCount() { return parameterTypes.length; } 

рдЖрдк рджреЗрдЦрд┐рдП, рд╣рд╛рдВ? рдЕрдЧрд░ рд╣рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ / рд╡рд┐рдзрд┐ рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ, рддреЛ рдмрд╕ java.lang.reflect.Method.getParameterCount() рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдРрд░реЗ рдХреЛ рдХреЙрдкреА рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░реЗрдВред рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЦреЗрд▓ рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ рдореЛрдордмрддреНрддреА рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ:


 @State(Scope.Thread) @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public class MethodToStringBenchmark { private Method method; @Setup public void setup() throws Exception { method = getClass().getMethod("toString"); } @Benchmark public int getParameterCount() { return method.getParameterCount(); } @Benchmark public int getParameterTypes() { return method.getParameterTypes().length; } } 

рдореЗрд░реА рдорд╢реАрди рдкрд░ рдФрд░ JDK 11 рдХреЗ рд╕рд╛рде рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рддрд╛ рд╣реИ:


 Benchmark Mode Cnt Score Error Units getParameterCount avgt 25 2,528 ┬▒ 0,085 ns/op getParameterCount:┬╖gc.alloc.rate avgt 25 тЙИ 10тБ╗тБ┤ MB/sec getParameterCount:┬╖gc.alloc.rate.norm avgt 25 тЙИ 10тБ╗тБ╖ B/op getParameterCount:┬╖gc.count avgt 25 тЙИ 0 counts getParameterTypes avgt 25 7,299 ┬▒ 0,410 ns/op getParameterTypes:┬╖gc.alloc.rate avgt 25 1999,454 ┬▒ 89,929 MB/sec getParameterTypes:┬╖gc.alloc.rate.norm avgt 25 16,000 ┬▒ 0,001 B/op getParameterTypes:┬╖gc.churn.G1_Eden_Space avgt 25 2003,360 ┬▒ 91,537 MB/sec getParameterTypes:┬╖gc.churn.G1_Eden_Space.norm avgt 25 16,030 ┬▒ 0,045 B/op getParameterTypes:┬╖gc.churn.G1_Old_Gen avgt 25 0,004 ┬▒ 0,001 MB/sec getParameterTypes:┬╖gc.churn.G1_Old_Gen.norm avgt 25 тЙИ 10тБ╗тБ╡ B/op getParameterTypes:┬╖gc.count avgt 25 2380,000 counts getParameterTypes:┬╖gc.time avgt 25 1325,000 ms 

рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо Method.getParameterTypes().length рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Method.getParameterTypes().length JDK рдореЗрдВ Method.getParameterTypes().length (рдХрдо рд╕реЗ рдХрдо java.base ) рдФрд░ рдЗрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ:


java.lang.invoke.MethodHandleProxies



java.util.concurrent.ForkJoinTask



java.lang.reflect.Executable



sun.reflect.annotation.AnnotationType



рдкреИрдЪ рдХреЛ рдПрдХ рдХрд╡рд░ рд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред


рдЕрдЪрд╛рдирдХ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рднреА рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рдзрд╛рд░рдг рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрдврд╝рд╛рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реЗ рдФрд░ рдореЗрд░реЗ рдкреИрдЪ рджреЛрдиреЛрдВ рдЕрдм рддрдХ рд╕рд╛рдл рд╣реИрдВ рдФрд░ рдЧрддрд┐рд╣реАрди рд╣реИрдВред рдХреНрдпреЛрдВ? рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИрдВ рдФрд░ рд╡реЗ рдореВрд░реНрдЦрддрд╛ рд╕реЗ рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рд╣рд╛рде рдирд╣реАрдВ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред


рдЗрд╕ рдХрд▓реНрдкрд┐рдд рдХрд╣рд╛рдиреА рдХрд╛ рдиреИрддрд┐рдХ рдпрд╣ рд╣реИ: рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреЗ рд╕рд░рд▓ рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдВрдд рдирд╣реАрдВ рд╣реИ! рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рддрд░реНрдХрд╕рдВрдЧрддрддрд╛ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди, рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рдХреЙрдорд░реЗрдбреЛрдВ рдиреЗ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рд╛рдордиреЗ рд░рдЦрд╛: рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ Method.getParameterTypes().length -> Method.getParameterCount() рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕реМрдВрдк рджреЗрдВред рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ "рдХрд╛рдиреВрдиреА" рд╣реЛрдЧрд╛?


рдЖрдЗрдП рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:


 @Test void arrayClone() { final Object[] objects = new Object[3]; objects[0] = "azaza"; objects[1] = 365; objects[2] = 9876L; final Object[] clone = objects.clone(); assertEquals(objects.length, clone.length); assertSame(objects[0], clone[0]); assertSame(objects[1], clone[1]); assertSame(objects[2], clone[2]); } 

рдЬреЛ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреНрд▓реЛрди рд╕рд░рдгреА рдЧреБрдВрдЬрд╛рдЗрд╢ рдирд╣реАрдВ рдЫреЛрдбрд╝рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдпрд╛ length рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рддрдХ length рдореВрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред


рдХреНрдпрд╛ рдЬреЗрдбреАрдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреА рд╣реИ? рд╣рдо рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ:


 @State(Scope.Thread) @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public class ArrayAllocationEliminationBenchmark { private int length = 10; @Benchmark public int baseline() { return new int[length].length; } @Benchmark public int baselineClone() { return new int[length].clone().length; } } 

JDK 13 рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ:


 Benchmark Mode Cnt Score Error Units baseline avgt 50 6,135 ┬▒ 0,140 ns/op baseline:┬╖gc.alloc.rate.norm avgt 50 56,000 ┬▒ 0,001 B/op clone avgt 50 18,359 ┬▒ 0,619 ns/op clone:┬╖gc.alloc.rate.norm avgt 50 112,000 ┬▒ 0,001 B/op 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдУрдкрдирдЬреЗрдбрдХ new int[length] рдлреЗрдВрдХрдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдЧреНрд░рд┐рд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣реЗрд╣:


 Benchmark Mode Cnt Score Error Units baseline avgt 25 2,470 ┬▒ 0,156 ns/op baseline:┬╖gc.alloc.rate.norm avgt 25 0,005 ┬▒ 0,008 B/op lone avgt 25 13,086 ┬▒ 1,059 ns/op lone:┬╖gc.alloc.rate.norm avgt 25 112,113 ┬▒ 0,115 B/op 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдк рдУрдкрдирдЬреЗрдХ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд┐рдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдереЛрдбрд╝рд╛ рдореЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдХрд░ рд╕рдХреЗ рдХрд┐ рдЧреНрд░рд┐рд▓ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╡реАрдПрдо рдХреЛрдб рдореЗрдВ рди рдХреЗрд╡рд▓ рд╣рд░ рдХреЛрдИ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╕рд╛рд░реНрдердХ рдлрд╛рдЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдПрдХ рдкрддреНрд░ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдХрд╣рд╛ рдерд╛ред


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдФрд░ рдХрдИ рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рд╣реИрдВред рд╡реНрд▓рд╛рджрд┐рдореАрд░ рдЗрд╡рд╛рдиреЛрд╡ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐:


рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬрд╛рд╡рд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдмрдврд╝рдиреЗ / рд╕рд┐рдХреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ,
"cloned_array.length => original_array.length" рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реА рд╣реИ
рдЪрд╛рд╣реЗ рдХреНрд▓реЛрди рд╕рдВрд╕реНрдХрд░рдг рдмрдЪ рдЧрдП рдпрд╛ рдирд╣реАрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рд╡рд░реНрддрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ:

http://hg.openjdk.java.net/jdk/jdk/file/tip/src/hotspot/share/opto/memnode.cpp#l2388

рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
cloned_array.length рдкрд╣реБрдВрдЪ рдХрд╛ рдХрд╛рд░рдг рдХреНрд▓реЛрди рдХреНрд▓реЛрди рдЕрднреА рднреА рдирд╣реАрдВ рд╣реИ
рд╡рд╣рд╛рдБред

рдЖрдкрдХреЗ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреНрд▓реЛрди рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдореВрд▓ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ) рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ
рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкрд╣реБрдВрдЪ рдЗрд╕реЗ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ
рдХрдард┐рдиред рдФрд░ рд╕реЗрдлрдкрд╛рдЗрдВрдЯ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ (рд░реАрдореИрдЯреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП)ред

рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рд░рдХреНрд╖рд╛рддреНрдордХ рдирдХрд▓ред

рдпрд╣реА рд╣реИ, рдХреНрд▓реЛрди рдХреЛ рдкреАрдЯрдирд╛ рд╕рдВрднрд╡ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде


 int len = new int[arrayLength].length; 

->


 int len = arrayLength; 

рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:


рд╣рдо рдЙрди рд╕рд░рдгреА рдЖрд╡рдВрдЯрди рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдХреЛрдИ рдЬреНрдЮрд╛рдд рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ рд╣реИ
рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ NegativeArraySize рдЕрдкрд╡рд╛рдж рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо
рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓рдВрдмрд╛рдИ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИред

рд╡реИрд╕реЗ рднреА - рдореЗрд░реЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ рд╕рдорд╛рдкреНрдд рдкреИрдЪ рд╣реИ рдЬреЛ рдЕрдкреНрд░рдпреБрдХреНрдд рд╕рд░рдгреА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ
рдПрдХ рдЙрдЪрд┐рдд рдЧрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдЖрд╡рдВрдЯрдиред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдк рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рдгреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлреЗрдВрдХ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдПрдХ NegativeArraySizeException рдХреЛ рдлреЗрдВрдХрдирд╛ рд╣реЛрдЧрд╛ NegativeArraySizeException рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 @Test void arrayWithNwgativeSize() { int length = 0; try { int newLen = -3; length = new Object[newLen].length; //  new Object[newLen]  fail(); } catch (NegativeArraySizeException e) { assert length == 0; } } 

рдЧреНрд░рд┐рд▓ рдХреНрдпреЛрдВ рд╕рдХреНрд╖рдо рдерд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ length рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рд╕реНрдерд┐рд░ рдФрд░ рд╣рдореЗрд╢рд╛ 10 рдХреЗ рдмрд░рд╛рдмрд░ рдерд╛, рдЬрд┐рд╕рдиреЗ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдХрд┐ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд░рдгреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рд╣реА рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреЛрдИ рдЧрд▓рддреА рдХреА рд╣реИ рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВред


рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА рд╣реИ :) рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реЗрдВ, рд╣рдо рд╕рдордЭреЗрдВрдЧреЗред

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


All Articles