рд▓рдЧрднрдЧ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдЯреНрд░реЛрдм рдХреЗ
рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдмреЗ рдкрд░
рдПрдХ рд▓реЗрдЦ рдерд╛, рд╕рдмрд╕реЗ рдЕрдХреНрд╕рд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬрдм рдЬрд╛рд╡рд╛ рдореЗрдВ рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рдЧрднрдЧ рджреЛ рджрд┐рди рдкрд╣рд▓реЗ рдореИрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрда рдЧрдпрд╛ред рд╕рдордп рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЦреЛрдЬ рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред
рдлрд┐рд▓рд╣рд╛рд▓, 6 рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИрд╢ рдЯреЗрдмрд▓ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ: рдЖрджрд┐рдо, рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд╕рднреА 4 рдорд╛рдирдЪрд┐рддреНрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕реЗрдЯ: рдЖрджрд┐рдо - рдЖрджрд┐рдо, рдЖрджрд┐рдо - рд╡рд╕реНрддреБ, рд╡рд╕реНрддреБ - рдЖрджрд┐рдо рдФрд░ рд╡рд╕реНрддреБ - рд╡рд╕реНрддреБ, рдЬрд┐рд╕ рдкрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХрд╛ рдПрдХ рдмрд╛рджрд▓ рдШреВрдорддрд╛ рд╣реИред
рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕реЛрдЪрддрд╛ рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп
рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреНрдпреЛрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ
рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдорд╛рдирдХ рдврд╛рдВрдЪреЗ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рдореМрд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИ рдФрд░ рди рд╣реА рджреЗрдЦреА рд╣реИред рдЗрд╕рд▓рд┐рдП,
java.lang.Iterable
,
java.util.Collection
рдФрд░
java.util.Map
рдореЗрд░реЗ
java.util.Map
рдкрд░ рдЬреИрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдореЗрд░реЗ рдмрд╛рджрд▓ рд╕реЗ рдКрдкрд░ рдЙрдарддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЬрд╛рд╡рд╛ 8 рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдВрдХ рджрд┐рдП рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд▓рдЧрднрдЧ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
spliterator()
рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдЖрдк рдЗрд╕рдХреА рдЖрджрдд рдбрд╛рд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирдП рдЯреНрд░реЛрд╡ рдврд╛рдВрдЪреЗ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡
MapIterator () рдЬрд╛рд╡рд╛ 8 рдФрд░
entrySet().iterator()
spliterator()
рд╕реЗ рд╕реНрдкреНрд▓рд┐рдЯреЗрдЯрд░ () рдХрд╛ рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд╣реИред
interface TMapIterator<K, V> { boolean tryAdvance(); K key(); V value(); ... }
рдпрд╣
entrySet().iterator()
рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред
рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрд╢ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рд╕рдорддреБрд▓реНрдп рд╣реИрдВред
class DHashSet<E> { ... protected boolean elementsEquals(@NotNull E a, @Nullable E b) { return a.equals(b); } protected int elementHashCode(@NotNull E element) { return element.hashCode(); } }
рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣реЛрдВ рдкрд░ "рдкреНрд░рддрд┐рд╡рд░реНрддреА" рд╡рд┐рдзрд┐рдпрд╛рдБ:
addAllTo()
,
allContainingIn()
,
removeAllFrom()
- рдзрд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред рдПрдХ рдорд╛рдирдХ рдврд╛рдВрдЪреЗ рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдкрд░ рд╣рдореЗрд╢рд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджреНрдпрдкрд┐ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз "рдЬрд╛рдирддрд╛ рд╣реИ" рдХрд┐ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреИрд╕реЗ рдЬрд╛рдирд╛ рд╣реИред
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд░рд┐рд╡рд░реНрд╕ рдкрд╛рд╕ рдХреЛ рдирд┐рдпрдорд┐рдд рдЗрдЯреНрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд╣рд░реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдбрдВрдкрд┐рдВрдЧ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЪреВрдВрдХрд┐ рдорд╛рдирдХ рдврд╛рдВрдЪреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрдмрдВрдзреЛрдВ рдореЗрдВ рд╕реВрдХреНрд╖реНрдо рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд░рд┐рд╡рд░реНрд╕ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рди рд╣реЛред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд┐рдпрдорд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЯреНрд░реЛрд╡ рдХреЗ рджрд┐рд▓ рдореЗрдВ рдЦреБрд▓реЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдЯреЗрдмрд▓ рд╣реИрдВ рдФрд░ рдЯрдХрд░рд╛рд╡ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рд╣реИрд╢рд┐рдВрдЧ рд╣реИрдВред рдЬрдм рдЖрдк рдЙрдирдореЗрдВ рдХреЛрдИ рдЖрдЗрдЯрдо рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реЗрд▓ рдХреЛ рдореБрдлреНрдд рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдмреНрдЬреЗ рдФрд░ "рд╣рдЯрд╛рдП рдЧрдП" рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рд╕рдВрдЪрд╛рд▓рди рдХреА рдЧрддрд┐ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЯреНрд░реЛрд╡ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд▓реЛрдкрди рдХрд╛рдЙрдВрдЯрд░ рдерд╛, рдЬреЛ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рднрд░рдг рдХрд╛рд░рдХ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рдерд╛ред
рдПрдХ рдЧреБрдгрд╛рдВрдХ k (0 рд╕реЗ 1 рд╕реЗ) рдХреЗ рд╕рд╛рде, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░рдВрддрд░ рд╡рд┐рд▓реЛрдкрди рдХреЗ рд╕рд╛рде, k - k ^ 2 рднрд░реЗ рд╣реБрдП рд╕реЗрд▓ рдмрдиреЗ рд╣реБрдП рд╣реИрдВ, рдФрд░ k ^ 2 рд╣рдЯрд╛рдП рдЧрдП рд╣реИрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд▓реЛрдкрди рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЗ рдЖрд╡реЗрд╖рдг рдХреЗ рд╕рд╛рде - рднрд░рд╛ (1 - k) ^ 2 - рдореБрдХреНрдд (рд╕рднреА рдорд╛рди 1 рдХреЗ рдЕрдВрд╢реЛрдВ рдореЗрдВ рд╣реИрдВ)ред
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред 0.5 рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдкрд╛рдд рдХреЗ рд╕рд╛рде, рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдЯрд╛рдП рдЧрдП рдЖрдЗрдЯрдо рдХрд╛ рдЕрдзрд┐рдХрддрдо рдПрдХ рдЪреМрдерд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╣реБрдд рд╕реБрдиреНрджрд░ред рд▓реЗрдХрд┐рди 0.8 рдХреЗ рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде - рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде, рдХреЗрд╡рд▓ 4% рдореБрдХреНрдд рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд░рд╣ рд╕рдХрддреА рд╣реИрдВ - рдпрд╣ рдПрдХ рдЕрдкрд░рд╛рдз рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдмрд╣реБрдд рд╕рд░рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдкреЗрд╢ рдХрд┐рдпрд╛ - рдХрд┐рд╕реА рднреА рд╕рдордп рд╣рдЯрд╛рдП рдЧрдП рдХрдХреНрд╖реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдпрд╛рдиреА, рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЖрдХрд╛рд░) рдпрд╛ рдореБрдХреНрдд рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛, рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ:
class DoubleHashBase { int size, free, removed, modCount; ... final void postRemoveHook() { modCount++; if ( ( --size < ++removed || removed > free ) && autoRehashEnabled ) { rehash(); } }
рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдПрдХ рддрддреНрд╡ рдвреВрдВрдв рд░рд╣реА рд╣реИред рдбрдмрд▓-рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рд░рдгреА рдЬрд┐рд╕рдХреА рд▓рдВрдмрд╛рдИ рдПрдХ рдЕрднрд╛рдЬреНрдп рд╣реИ, рд▓рдЧрднрдЧ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдХреВрдж рдЬрд╛рддреА рд╣реИ, рдФрд░ рддрддреНрд╡ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЙрд╕реА рд╕рдордп, рд╡реЗ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╡рд╣рд╛рдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рд░рдгреА (
map.get()
рдпрд╛
set.contains()
) рд╕реЗ рдПрдХ рдорд╛рди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдПред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рддрддреНрд╡ рдЕрднреА рддрдХ
рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, рдХрд┐ рдпрд╣
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╣рд╛рдВ рд╣реИред рдкрд┐рдЫрд▓реЗ рдЯреНрд░реЛрд╡ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рджреЛрдиреЛрдВ рдЦреЛрдЬ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реЗрд▓ рдЦрд╛рд▓реА рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреНрдпрд╛ рд╣рдо рд╡рд╣рд╛рдВ рдЭреВрда рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджреНрдпрдкрд┐ "рд▓реЗ" рдХреА рдЦреЛрдЬ рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рд╡рд╛рдВрдЫрд┐рдд рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рдБ рдпрд╣ рд╣реИ)ред
рдЗрд╕ рджреЛ-рд▓рд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рдиреЗ
IntHashSet.contains(int)
5 ns рд╕реЗ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ред
рдЬреЗрдПрдордПрдЪ рдкрд░ рдЖрдо рддреМрд░ рдкрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдкреНрд░рдпрд╛рд╕
CharHashSet
рдкрд░
CharHashSet
, рдлреИрдХреНрдЯрд░ 0.5 рднрд░реЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд▓рдЧрднрдЧ 4 KB рд▓реЗрддреА рд╣реИред рд╡рд┐рд╡рд░рдг рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛:
@GenerateMicroBenchmark public char charSet_simple(CharSetState state) { char sum = 0; TCharIterator it = state.iterator; while (it.hasNext()) { sum += it.nextChar(); } return sum; } @GenerateMicroBenchmark public char charSet_forEachLoop(CharSetState state) { char sum = 0; for (char v : state) { sum += v; } return sum; } public static class CharSum implements CharConsumer { public char sum; public void accept( char b ) { sum += b; } } @GenerateMicroBenchmark public char charSet_forEachFunction(CharSetState state) { CharSum procedure = new CharSum(); state.set.forEach( procedure ); return procedure.sum; } @GenerateMicroBenchmark public char charSet_tryAdvance(CharSetState state) { char sum = 0; TCharIterator it = state.iterator; while (it.tryAdvance()) { sum += it.charValue(); } return sum; }
рдкрд░рд┐рдгрд╛рдо:
Mean Mean error charSet_forEachFunction 6,7 1,1 nsec/iter charSet_forEachLoop 15,4 2,1 nsec/iter charSet_simple 8,7 0,1 nsec/iter charSet_tryAdvance 8,6 0,1 nsec/iter
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реИ, jlIterable рджреНрд╡рд╛рд░рд╛ рдлреЛрд░рдЪред
"рд╕рд░рд▓" рд╡рд┐рдзрд┐ рдЯреНрд░реЛрд╡ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 30% рдЕрдзрд┐рдХ рддреЗрдЬ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЛ 2 рдмрд╛рд░ рдЦреЛрдЬрд╛ рдЧрдпрд╛:
hasNext()
рд╡рд┐рдзрд┐ рдФрд░ рдлрд┐рд░
next()
рд╡рд┐рдзрд┐ рджреЛрдиреЛрдВ рдореЗрдВред рдЕрдм рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореЗрд░реЗ рдкрд╛рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рдордп рдирд╣реАрдВ рд╣реИ:
рдХреЛрдИ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдирд╣реАрдВ (
CharArrayList
)
рд╕рднреА рд╡рд░реНрдЧреЛрдВ рд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реАрд░рд┐рдпрд▓ рд╕рдорд░реНрдерди
рд▓рдЧрднрдЧ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ 8 рд╕реЗ рдереЛрдбрд╝реА рдХреЙрдкреА рдкреЗрд╕реНрдЯ рд╣реИред
рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдирдИ рд░реВрдкрд░реЗрдЦрд╛ рдорд╛рдирдХ рдПрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдиреЗ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рд╣реИ
Map<Integer, Long> map = new HashMap<>();
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдирдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬрд╛рд╡рд╛ 7u25 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдпрд╣ рд╕реНрд░реЛрдд (рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛) рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд╡рд╛ 6 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ Intellij рдХреЗ рддрд╣рдд рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкрддреНрддреЗрджрд╛рд░ рдмрдВрдзрди рд╢рд╛рдорд┐рд▓ рд╣реИ:
bitbucket.org/leventov/troet/rcрдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╣реИрд╢ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдореВрд▓ - (рдЕрдкреЗрдХреНрд╖рд┐рдд) рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред