рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд▓реЙрдХ рдЕрд░рд╛рдЙрдВрдб рдЗрдореИрдЯреЗрдмрд▓рд┐рд╕реНрдЯ

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


(рдпрд╣ рдПрдХ рдЙрддреНрддрд░ рд▓реЗрдЦ рд╣реИ, рдкрд╣рд▓реЗ рдореВрд▓ рд▓реЗрдЦ рдкрдврд╝реЗрдВред)


рдЕрдирдореЙрдбрд┐рдмрд┐рд▓рд┐рд╕реНрдЯрд┐рдХ рдмрдирд╛рдо рдЗрдореНрдпреВрдЯреЗрдмрд▓рд┐рд╕реНрдЯ


рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬреЛ рдЙрдарддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ: рдореБрдЭреЗ рдПрдХ UnmodifiableList рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ ImmutableList ? рдЪрд░реНрдЪрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореВрд▓ рд▓реЗрдЦ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ UnmodifiableList рдХреЗ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛ рд╡рд┐рдЪрд╛рд░ рджреЗрдЦреЗ рдЧрдП рд╣реИрдВ:


  • рд╡рд┐рдзрд┐ рдПрдХ UnmodifiableList рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рд╡рд╣ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ)
  • рдЕрдиреНрдп рд╕реВрддреНрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, UnmodifiableList рдФрд░ ImmutableList рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдмрд░рд╛рдмрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди UnmodifiableList рдЕрдзрд┐рдХ "рд╣рд▓реНрдХреЗ" рдХреЗ рд░реВрдк UnmodifiableList рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк ImmutableList рдХрд╛ "рдЖрд╕рд╛рди" рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ UnmodifiableList рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдХреЗрд╡рд▓ ImmutableList рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред


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


рд╣рдо ImmutableList рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ:


  • рдПрдкреАрдЖрдИ "рд░реАрдбрд┐рдВрдЧ" рднрд╛рдЧ рдореЗрдВ рдирд┐рдпрдорд┐рдд List рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред "рд▓реЗрдЦрди" рднрд╛рдЧ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • ImmutableList рдФрд░ List рдХреЛ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╕рдВрдмрдВрдзреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХреНрдпреЛрдВ - рдореВрд▓ рд▓реЗрдЦ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред
  • рдпрд╣ ArrayList рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рд╣реИред
  • рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ, рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрдореНрдпреВрдЯреЗрдмрд▓рд┐рд╕реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо Collection рдФрд░ List рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ "рд░реАрдбрд┐рдВрдЧ" рднрд╛рдЧ рдХреЛ рд╣рдорд╛рд░реЗ рдирдП рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред


 public interface ReadOnlyCollection<E> extends Iterable<E> { int size(); boolean isEmpty(); boolean contains(Object o); Object[] toArray(); <T> T[] toArray(T[] a); boolean containsAll(Collection<?> c); } public interface ReadOnlyList<E> extends ReadOnlyCollection<E> { E get(int index); int indexOf(Object o); int lastIndexOf(Object o); ListIterator<E> listIterator(); ListIterator<E> listIterator(int index); ReadOnlyList<E> subList(int fromIndex, int toIndex); } 

рдЗрд╕рдХреЗ рдмрд╛рдж, ImmutableList рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ ArrayList рд╕рдорд╛рди рд╣реИ (рд▓реЗрдХрд┐рди List рдмрдЬрд╛рдп ReadOnlyList рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ)ред


 public class ImmutableList<E> implements ReadOnlyList<E>, RandomAccess, Cloneable, Serializable 

рд╣рдо ArrayList рд╕реЗ рдХрдХреНрд╖рд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреГрдврд╝рддрд╛ рд╕реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВ, "рд▓реЗрдЦрди" рднрд╛рдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рд╕рдорд╡рд░реНрддреА рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЖрджрд┐ред


рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдВрдЧреЗ:


 public ImmutableList() public ImmutableList(E[] original) public ImmutableList(Collection<? extends E> original) 

рдкрд╣рд▓реЗ рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдПрд░реЗ рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рд▓рд┐рд╕реНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдирдХрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рддреАрд╕рд░рд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдПрдХ рд╕рдорд╛рди ArrayList рдирд┐рд░реНрдорд╛рддрд╛ рднреА рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ orginal ArrayList рдпрд╛ Arrays$ArrayList рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ Arrays.asList() рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдорд╛рдорд▓реЗ 90% рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЙрд▓ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗред


рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ original рд╕рд░рдгреА рдХреЛ "рдЪреЛрд░реА" рдХрд░реЗрдВрдЧреЗ (рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╕рдВрдХреЗрддрди рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИ)ред "рдЪреЛрд░реА" рдХрд╛ рд╕рд╛рд░:


  • рд╣рдо рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд░рдгреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ ( ArrayList.elementData )
  • рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдРрд░реЗ рд╕реЗ рд▓рд┐рдВрдХ рдХреЙрдкреА рдХрд░реЗрдВ
  • рд╕реНрд░реЛрдд рдХреНрд╖реЗрддреНрд░ рд╢реВрдиреНрдп рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛

 protected static final Field data_ArrayList; static { try { data_ArrayList = ArrayList.class.getDeclaredField("elementData"); data_ArrayList.setAccessible(true); } catch (NoSuchFieldException | SecurityException e) { throw new IllegalStateException(e); } } public ImmutableList(Collection<? extends E> original) { Object[] arr = null; if (original instanceof ArrayList) { try { arr = (Object[]) data_ArrayList.get(original); data_ArrayList.set(original, null); } catch (@SuppressWarnings("unused") IllegalArgumentException | IllegalAccessException e) { arr = null; } } if (arr == null) { //   ArrayList,      -  arr = original.toArray(); } this.data = arr; } 

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


рдЕрдиреНрдп рд╡рд░реНрдЧ


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


рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреА рд╣реИ: рдЙрдирд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реВрдЪрд┐рдпрд╛рдБ рднреЗрдЬрддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпреЗ рд╕реВрдЪрд┐рдпрд╛рдБ рдПрдХ ArrayList рд╣реЛрдВрдЧреАред ImmutableList рдХрд╛ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ImmutableList рдкрд░рд┐рдгрд╛рдореА ArrayList рдХреЛ ImmutableList рддреЗрдЬрд╝реА рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рднреЗрдЬреА рдЧрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ: List рд▓рд┐рдП ImmutableList ред рддреЗрдЬреА рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ ImmutableList рдЖрд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ List рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрд╡рд╛рдж рдХреЛ рд╕реВрдЪреА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ ( Collections.unmodifiableList рд╕рдорд╛рди Collections.unmodifiableList )ред


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


MutableList рд╕реЗ MutableList рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдПрдХ рддреНрд╡рд░рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, ArrayList рдХреЛ ImmutableList рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдЕрдм рдореВрд▓ рд╕реВрдЪреА рдХреЛ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред


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


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


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


рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ


ImmutableList рд╣реА ImmutableList , рдЬрд┐рд╕реЗ "рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ" рдЦрдВрдб (рдЕрднреА рддрдХ рдирд╣реАрдВ?) рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


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


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


рдПрдХ рдмрд╛рдд: рдЕрдЧрд░ рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рд╣реИ ... (рддрд╛рд╣рд┐рддреА, рддрд╛рд╣рд┐рддреА ... рд╣рдо рдХрд┐рд╕реА рддрд╛рд╣рд┐рддреА рдореЗрдВ рдирд╣реАрдВ рдереЗ! рд╡реЗ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВред)

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


All Articles