рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ ImmutableList рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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


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


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


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


рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдХреА рдЕрдкрд░рд┐рд╣рд╛рд░реНрдпрддрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рд╣реИрдХ" рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдЙрд╕реА рдкреИрдХреЗрдЬ рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдХрд░, рдЙрд╕рдХреЗ рдмрд╛рдж рд╕реВрдЪреА рдХреЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкреЙрдкрд┐рдВрдЧ рдХрд░рдХреЗ, рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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


рд╣рдо рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣рдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░:


  • MutableList рдФрд░ MutableList ред рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
  • рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдзрд╛рд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рдЗрди рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рд╕рднреА List рдПрд╕ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк List рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рдЕрд╡рд╕рд░ рдкрд░ рд╣рдо List рдХреЛ / рд╕реЗ рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдпрд╣ List рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд / рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдгреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
  • MutableList , MutableList , List рдмреАрдЪ рдЖрдкрд╕реА рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдпрдерд╛рд╢реАрдШреНрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдирдХрд▓ рдХреЗ рдмрд┐рдирд╛)ред "рд╕рд╕реНрддреЗ" рдЧреЛрд▓-рдпрд╛рддреНрд░рд╛ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдкреВрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЗрд╡рд▓ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ Set рдФрд░ Map рд╕рд╛рде рдкреВрд░рдХ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред


рдПрдкреАрдЖрдИ


ImmutableList


ImmutableList ReadOnlyList рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ (рдЬреЛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдХреЙрдкреА List рдЧрдИ List рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рднреА рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдбрд╛рд▓реА рдЧрдИ рд╣реИрдВ)ред рдЬреЛрдбрд╝реЗ рдЧрдП рддрд░реАрдХреЗ:


 List<E> toList(); MutableList<E> mutable(); boolean contentEquals(Iterable<? extends E> iterable); 

toList рд╡рд┐рдзрд┐ рдПрдХ toList рдХреЛ List рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдПрдХ рд░реИрдкрд░ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдХ UnsupportedOperationException рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпрд╛рдБ рдореВрд▓ ImmutableList рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред


mutable рд╡рд┐рдзрд┐ рдПрдХ MutableList рдХреЛ MutableList ред рдПрдХ рд░реИрдкрд░ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рдмрджрд▓рд╛рд╡ рддрдХ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдореВрд▓ ImmutableList рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ, рдЖрд╡рд░рдг рдореВрд▓ ImmutableList рд╕реЗ ImmutableList , рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрдВрддрд░рд┐рдХ ArrayList рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдСрдкрд░реЗрд╢рди рдлрд┐рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


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


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ReadOnlyList рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, listIterator рдФрд░ listIterator рдорд╛рдирдХ java.util.Iterator / java.util.ListIterator рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИрдВред рдЗрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрд╢реЛрдзрди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ UnsupportedOperationException рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рджрдмрд╛рдпрд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╣рдорд╛рд░рд╛ ReadOnlyIterator рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо for (Object item : immutableList) рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдЦреБрд╢реА рдХреЛ рддреБрд░рдВрдд рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛ред


MutableList


MutableList рдирд┐рдпрдорд┐рдд List рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИред рдЬреЛрдбрд╝реЗ рдЧрдП рддрд░реАрдХреЗ:


 ImmutableList<E> snapshot(); void releaseSnapshot(); boolean contentEquals(Iterable<? extends E> iterable); 

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


Mutabor


Mutabor рд╡рд░реНрдЧ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ "рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ" рд╣реИрдВред


рд╣рд╛рдБ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдм "рдореНрдпреВрдЯрд╛рдмреЛрд▓" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ "рдореНрдпреВрдЯреЗрдмрд▓" рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдФрд░ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдореИрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реВрдВрдЧрд╛", рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджреВрд╕рд░реЛрдВ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧреНрд░рд╣ "рдмрджрд▓рдиреЗ") рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реИред


 public static <E> ImmutableList<E> copyToImmutableList(E[] original); public static <E> ImmutableList<E> copyToImmutableList(Collection<? extends E> original); public static <E> ImmutableList<E> convertToImmutableList(Collection<? extends E> original); public static <E> MutableList<E> copyToMutableList(Collection<? extends E> original); public static <E> MutableList<E> convertToMutableList(List<E> original); 

copyTo* рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдХрд░ рдЙрдкрдпреБрдХреНрдд рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред convertTo* рд╡рд┐рдзрд┐рдпрд╛рдБ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддреНрд╡рд░рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП convertTo* , рдФрд░ рдпрджрд┐ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рддреЛ рд╡реЗ рдзреАрдореА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рддреНрд╡рд░рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ рдореВрд▓ рд╕рдВрдЧреНрд░рд╣ рд╕рд╛рдлрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред


MutableList / MutableList рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ImmutableList MutableList рд▓рд┐рдП рдХреЙрд▓ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг


ImmutableListImpl


рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА encapsulatesред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рдЧрднрдЧ ArrayList рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рдорд╡рд░реНрддреА рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрд╢реЛрдзрд┐рдд рддрд░реАрдХреЛрдВ рдФрд░ рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


toList рдФрд░ contentEquals рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИред toList рд╡рд┐рдзрд┐ рдПрдХ рд░реИрдкрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП toList рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдХреА рдзреАрдореА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред


mutable рд╡рд┐рдзрд┐ рдЗрд╕ MutableListImpl рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ MutableListImpl рджреЗрддрд╛ рд╣реИред рдбрд╛рдЯрд╛ рдХреЙрдкреА рддрдм рддрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рд╛рдкреНрдд MutableList рдкрд░ рдХрд┐рд╕реА рднреА рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


MutableListImpl


ImmutableList рдФрд░ List рд▓рд┐рдВрдХ Encapsulatesред рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╕рдордп, рдЗрди рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд▓рд┐рдВрдХ рд╣рдореЗрд╢рд╛ рднрд░рд╛ рд░рд╣рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ null рд░рд╣рддрд╛ рд╣реИред


 protected ImmutableList<E> immutable; protected List<E> list; 

рдпрджрд┐ рдпрд╣ null рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдиреНрдпрдерд╛ List , рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ ImmutableList рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред


рд╢реБрд░реБрдЖрддреА рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдкреБрд░реНрдирдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ


 protected void beforeChange() { if (list == null) { list = new ArrayList<>(immutable.toList()); } immutable = null; } 

snapshot рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:


 public ImmutableList<E> snapshot() { if (immutable != null) { return immutable; } immutable = InternalUtils.convertToImmutableList(list); if (immutable != null) { //    //   ,  . //     immutable     . list = null; return immutable; } immutable = InternalUtils.copyToImmutableList(list); return immutable; } 

releaseSnapshot рдФрд░ contentEquals рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ releaseSnapshot рддреБрдЪреНрдЫ рд╣реИред


рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ "рд╕рд╛рдзрд╛рд░рдг" рдЙрдкрдпреЛрдЧ рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЗрдЬреА рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред


рдлрд╛рд╕реНрдЯ рд╕реВрдЪреА рд░реВрдкрд╛рдВрддрд░рдг


ArrayList рдпрд╛ Arrays$ArrayList рд╡рд░реНрдЧреЛрдВ ( Arrays.asList() рдкрджреНрдзрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо Arrays.asList() рд▓рд┐рдП рддреЗрдЬрд╝ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдВрднрд╡ рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдареАрдХ рд╡рд┐рдкрд░реАрдд рд╣реИред


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


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


рд╕рдорддреБрд▓реНрдп / рд╣реИрд╢рдХреЛрдб рдХреА рд╕рдорд╕реНрдпрд╛


рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ equals рдФрд░ hashCode рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


рддреБрд▓рдирд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрдЪреА рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде ArrayList рдФрд░ LinkedList рд╕рдорд╛рди рд╣реЛрдВрдЧреЗред


рдпрд╣рд╛рдБ AbstractList рдХреЗ рдмрд░рд╛рдмрд░ / рд╣реИрд╢рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдЬрд┐рд╕рдореЗрдВ рд╕реЗ ArrayList рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ)
 public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof List)) return false; ListIterator<E> e1 = listIterator(); ListIterator e2 = ((List) o).listIterator(); while (e1.hasNext() && e2.hasNext()) { E o1 = e1.next(); Object o2 = e2.next(); if (!(o1==null ? o2==null : o1.equals(o2))) return false; } return !(e1.hasNext() || e2.hasNext()); } public int hashCode() { int hashCode = 1; for (E e : this) hashCode = 31*hashCode + (e==null ? 0 : e.hashCode()); return hashCode; } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рднреА List рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рд╕рдорд╛рди рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ equals рд╣реИ (рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, hashCode )ред рдЕрдиреНрдпрдерд╛, рдЖрдк рдРрд╕реЗ рд╣рд╛рд▓рд╛рдд рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм a.equals(b) && !b.equals(a) , рдЬреЛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐ Set рдФрд░ Map ред


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ MutableList рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдФрд░ MutableList рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде MutableList рдФрд░ MutableList рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ MutableList рдПрдХ List рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, contentEquals рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП contentEquals рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИрдВред


hashCode рдХреЗ рд▓рд┐рдП equals рдФрд░ hashCode рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди AbstractList рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди ReadOnlyList рджреНрд╡рд╛рд░рд╛ List рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рдеред


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


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


рдпрджрд┐ рдХреЛрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдиреЗ "рдлреАрдбрдмреИрдХ" рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдпрд╛ рд╣реИред


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 private boolean myBusinessProcess() { List<Entity> tempFromDb = queryEntitiesFromDatabase("SELECT * FROM my_table"); ImmutableList<Entity> fromDb = Mutabor.convertToImmutableList(tempFromDb); if (fromDb.isEmpty() || !someChecksPassed(fromDb)) { return false; } //... MutableList<Entity> list = fromDb.mutable(); //time to change list.remove(1); ImmutableList<Entity> processed = list.snapshot(); //time to change ended //... if (!callSideLibraryExpectsListParameter(processed.toList())) { return false; } for (Entity entity : processed) { outputToUI(entity); } return true; } 

рд╕рднреА рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ! рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬреЗрдВ!

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


All Articles