Почему я не могу добавить элемент в список после присвоения значения от Arrays.asListДобавление элементов в список Java
List<Integer> sam = Arrays.asList(1,2,3,4);
sam.add(5);
for (Integer integer : sam)
{
System.out.println(integer);
}
Почему я не могу добавить элемент в список после присвоения значения от Arrays.asListДобавление элементов в список Java
List<Integer> sam = Arrays.asList(1,2,3,4);
sam.add(5);
for (Integer integer : sam)
{
System.out.println(integer);
}
Arrays.asList(1,2,3,4)
создает «представление списка» на массив, размер которого не может измениться. Таким образом, мы можем использовать и получать доступ к массиву через интерфейс List
.
Если вы хотите список, в котором вы можете добавить значения, но по-прежнему использовать удобный Arrays.asList(..)
, просто сделать:
List<Integer> sam = new ArrayList<>(Arrays.asList(1,2,3,4));
Является ли это тем, что, получая просмотр списка, мы можем выполнять такие операции, как мы делаем в списке? –
Да. Все методы из интерфейса «Список» доступны, но некоторые из них имеют ограничения: например, 'add' не будет работать, потому что это все еще массив. –
Arrays.asList
возвращает список фиксированного размера. Добавление или удаление элементов из этого списка недопустимо, однако можно изменить элементы внутри этого списка, используя метод set
.
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a); // this is not java.util.ArrayList
}
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable {
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
public E set(int index, E element) {
E oldValue = a[index];
a[index] = element;
return oldValue;
}
// add() and remove() methods are inherited from AbstractList
}
public abstract class AbstractList<E> extends AbstractCollection<E>
implements List<E> {
public E remove(int index) {
throw new UnsupportedOperationException();
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
}
Возвращает список фиксированного размера, поддержанный указанным массив. (Изменяется на возвращаемый список «write through» в массив.) Этот метод действует как мост между API-интерфейсами на основе массива и коллекцией в сочетании с Collection.toArray(). Возвращенный список является сериализуемым и реализует RandomAccess.
Итак, после того, как вы создали, вы не можете добавлять в него элементы.
asList(T... a)
Возвращает список фиксированного размера, поддерживаемый указанным массивом.
List<Integer> sam = new ArrayList<Integer>();
sam.addAll(Arrays.asList(1,2,3,4));
sam.add(5);
for (Integer integer : sam)
{
System.out.println(integer);
}
Глядя в документации метода:
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)
Метод Arrays.asList вернулся фиксированного размера в виде списка, так что вы не можете добавлять элементы, используя список.
Во всяком случае, тот же вопрос ответил здесь:
http://stackoverflow.com/questions/4792160/arrays-aslist-doubt Это поможет вам понять, что вы делаете , – Mueretee