рдореИрдВрдиреЗ рд▓реЗрдЦ рдкрдврд╝рд╛ "рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЛрдИ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рди рддреЛ рдЕрдм, рди рд╣реА рдХрднреА" рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╕рдорд╕реНрдпрд╛, рдЬреЛ рд▓реЗрдЦрдХ рдХреЛ рджреБрдЦреА рдХрд░рддреА рд╣реИ, рдПрдХ рд╕реАрдорд┐рдд рдкреИрдорд╛рдиреЗ рдкрд░ рдХрд╛рдлреА рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЖрдЪрд╛рд░ рд╕рдВрд╣рд┐рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВред
(рдпрд╣ рдПрдХ рдЙрддреНрддрд░ рд▓реЗрдЦ рд╣реИ, рдкрд╣рд▓реЗ рдореВрд▓ рд▓реЗрдЦ рдкрдврд╝реЗрдВред)
рдЕрдирдореЙрдбрд┐рдмрд┐рд▓рд┐рд╕реНрдЯрд┐рдХ рдмрдирд╛рдо рдЗрдореНрдпреВрдЯреЗрдмрд▓рд┐рд╕реНрдЯ
рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬреЛ рдЙрдарддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ: рдореБрдЭреЗ рдПрдХ 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) {
рдПрдХ рдЕрдиреБрдмрдВрдз рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕реВрдЪреА рдХреЛ рдПрдХ 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
, рдЬрд┐рд╕реЗ "рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ" рдЦрдВрдб (рдЕрднреА рддрдХ рдирд╣реАрдВ?) рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореВрд▓ рд▓реЗрдЦ, "рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛" рдХрд╛ рдЖрдзрд╛рд░ рдЧрд▓рдд рд╣реИред
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рдВ, рдЫреЛрдЯреА рдмреИрд╕рд╛рдЦреА рдХреЗ рд╕рд╛рдеред рд╣рд╛рдВ, рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рднреАрддрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдЙрдирдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рдмрд╣реБрдд рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдзреАрд░реЗ-рдзреАрд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
рдПрдХ рдмрд╛рдд: рдЕрдЧрд░ рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рд╣реИ ... (рддрд╛рд╣рд┐рддреА, рддрд╛рд╣рд┐рддреА ... рд╣рдо рдХрд┐рд╕реА рддрд╛рд╣рд┐рддреА рдореЗрдВ рдирд╣реАрдВ рдереЗ! рд╡реЗ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВред)