2014-11-14 3 views
3

В Java у меня есть следующий массив «integerArray» и добавьте к нему 2 целых числа.Как работают Backed Collections в Java?

Integer[] integerArray = new Integer[3]; 
integerArray[0] = 1; 
integerArray[1] = 2; 

Теперь я создаю список из массива.

List<Integer> integerList = Arrays.asList(integerArray); 

В этот момент «integerList» содержит 1 и 2.

Теперь я добавить еще один элемент в массив.

integerArray[2] = 3; 

В этот момент, если мы исследуем целочисленный список, мы видим, что он содержит 1,2,3;

Какой механизм используется, чтобы любые изменения в массиве отражались и в Списке? Простая реализация или пример действительно помогут.

ответ

4

Возвращает список фиксированного размера при поддержке указанного массива

Это означает, что возвращаемый список объект, который на самом деле является ArrayList, имеет ссылку на массив, в отличие от копия. Поскольку он имеет ссылку на этот массив, любые изменения в нем будут отражены в списке.

Метод Arrays.asList просто вызывает конструктор ArrayList определяется следующим образом:

ArrayList (E[] array) { 
    if (array == null) 
     throw new NullPointerException(); 
    a = array; 
} 

Так поле a будет хранить ссылку на ваш первоначальный массив.

4

Это потому, что это та же переменная, но используется как список. Если вы читали Javadoc для Arrays.asList()

Это четко сказано

Возвращает список фиксированного размера, поддержанный указанным массивом. (Изменения в возвращенном списке «write through» в массив.) Этот метод действует как мост между API на основе массивов и коллекций в сочетании с Collection.toArray(). Возвращенный список является сериализуемым и реализует RandomAccess.

2

Arrays.asList - статический/полезный метод, который вызывает конструктор для создания нового массива ArrayList. ArrayList поддерживается массивом. Это имеет место во многих языках программирования, где структуры предварительных данных просто поддерживаются примитивными массивами. Вы можете посмотреть исходный код здесь Arrays.asList