рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рдЕрдорд░реВрдж рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

рдкрд░рд┐рдЪрдп


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


рдЬрд╛рд╡рд╛ рдХрд▓реЗрдХреНрд╢рдВрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЯреНрд░рд╕реНрдЯ рдкрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрдВрдЯреЗрдирд░ рд╡рд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ java.util.Collectionрддрд░реАрдХреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ add, clear, removeрдЖрджрд┐ : рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рдкрд╕рдВрджреАрджрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ Collections.emptyList(), Collections.singletonList<T>(T t), Arrays.asList<T>(T.. values)рдФрд░ рдЕрдиреНрдпред рдпрд╣реАрдВ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рджреЗрдЦреЗрдВ:


List<Integer> list = Arrays.asList(21, 22, 23);
list.add(24)        //  ! UnsupportedOperationException

рдРрд╕рд╛ рдХреИрд╕реЗ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ java.util.Listрд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ java.util.Collection, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ addред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ Arrays.asList<T>(T... t)рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ addрдФрд░ removeрдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддреА рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдЕрдЬреАрдм рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИ: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдерд┐рддрд┐ рдФрд░ рднреА рдЕрдЬрдирдмреА рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЕрдЧрд░ рд╣рдо рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред


List<Integer> list = Arrays.asList(21, 22, 23);
list.set(0, 121);
System.out.println(list);        // [121, 22, 23]

. . , . , , , . .


List<Integer> filtered = filter(List<Integer> list);

filter List<Integer> . ? , ? try {} catch(Exception e) {} add remove тАФ . ? ? list, filtered? . , . , тАФ . , , list.clear(), , . SOLID, L тАФ , , . , add , .


- , Stream API. , Java , , , . , , .


, java.util.Collection, java.util.Iterable, Collection. Iterable , Iterator, for-each . .


public interface Iterator<E> {
    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

remove. , for-each, , , API , , . - , , , , Java , .


Guava


Guava? тАФ ImmutableList.


ImmutableList<String> people = ImmutableList.of("Michael", "Simon", "John")
...

? ┬лImmutable┬╗. , ImmutableList java.util.List, add, clear ... , . , final. : , List Collection. , ImmutableList, , , ┬л ┬╗. Guava .


Kotlin


? , JetBrains Kotlin. , , , . :


рдЫрд╡рд┐


, , , .


val list: List<Int> = listOf(1, 2, 3)
val mutableList: MutableList<Int> = list as MutableList<Int>
mutableList.clear()      //  !  UnsupportedOperationException

- , MutableList List MutableList, , . , Java Collections Framework, Guava: , . , , . , Java, - , , , .



? ? , : , , , . . Java Collections Framework Immutable. :


рдЫрд╡рд┐


, , ┬лImmutable┬╗. , . , ImmutableQueue, , . . LinkedList , , ( , ). ImmutableLinkedList .


- , , . List ImmutableList. , toMutableList toImmutableList ImmutableList List . , , . , ArrayList ImmutableArrayList . . ArrayList , ImmutableArrayList, ImmutableArrayList ArrayList. API , .


, тАФ java.util.Iterable. , for-each , . java.util.Iterator, , remove, . , .


  1. ImmutableIterable, ImmutableIterator. , , Java for-each Iterable, ImmutableIterable.
  2. ImmutableIterator, java.util.Iterator remove, final, . , .
  3. remove Iterator, , Java, , .


, Java JP . , тАФ , Java-. , , . !


P.S.


рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧ Github рдкрд░ рд▓рд┐рдВрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред


All Articles