Когда вы конвертируете из массива в коллекционный объект.то есть, на основе массива для API на основе коллекции, то он предоставит вам объект коллекции фиксированного размера, потому что поведение массива имеет фиксированный размер.
java.util.Arrays.asList (T... а)
Образцы соусов для конформации.
public class Arrays {
public static <T> List<T> asList(T... a) {
return new java.util.Arrays.ArrayList.ArrayList<>(a); // Arrays Inner Class ArrayList
}
//...
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable {
//...
}
}
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E set(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
}
Форма above Source
Вы можете заметить, что класс java.util.Arrays.ArrayList
не @Override add(index, element), set(index, element), remove(index)
.Таким образом, из наследования он выполняет функцию суперкласса add()
, которая выдает UnsupportedOperationException
.
Поскольку AbstractList<E>
является абстрактным классом, он обеспечивает реализацию iterator() and listIterator()
, так что мы можемперебрать объект списка.
List<String> list_of_Arrays = Arrays.asList(new String[] { "a", "b" ,"c"});
try {
list_of_Arrays.add("Yashwanth.M");
} catch(java.lang.UnsupportedOperationException e) {
System.out.println("List Interface executes AbstractList add() fucntion which throws UnsupportedOperationException.");
}
System.out.println("Arrays → List : " + list_of_Arrays);
Iterator<String> iterator = list_of_Arrays.iterator();
while (iterator.hasNext()) System.out.println("Iteration : " + iterator.next() );
ListIterator<String> listIterator = list_of_Arrays.listIterator();
while (listIterator.hasNext()) System.out.println("Forward iteration : " + listIterator.next() );
while(listIterator.hasPrevious()) System.out.println("Backward iteration : " + listIterator.previous());