Какова цель использования asList? - PullRequest
3 голосов
/ 31 июля 2011

Мне просто интересно, в чем выгода и цель метода asList() в Массивах .

Возвращает список фиксированного размера, поддерживаемый указанным массивом, поэтому мы не можем добавлять элементы в этот список, и он будет похож на массив (мы не можем добавлять элементы к нему). Есть ли способ преобразовать список фиксированного размера в список не фиксированного размера?

Когда я пытаюсь добавить элементы в список фиксированного размера, он выдает UnsupportedOperationException:

Double[] d = {3.0, 4.0, 5.0};
List<Double> myList = Arrays.asList(d);
myList.add(6.0); // here it will throw an exception

Ответы [ 6 ]

11 голосов
/ 31 июля 2011

Из документов Java:

"Этот метод действует как мост между API на основе массива и на основе коллекции"

На ваш вопрос;

Double[] d = {3.0, 4.0, 5.0};
List<Double> yourList = new ArrayList(Arrays.asList(d));
yourList.add(6.0);
4 голосов
/ 31 июля 2011

Для использования в других методах, которые требуют List (или некоторый суперинтерфейс List, такой как Collection или Iterable) в качестве аргумента.т.е.

Double[] doubles = { 0d, 1d, 2d };
//... somewhere ...
someMethodThatRequiresAList(Arrays.asList(doubles));
//... elsewhere that you can't change the signature of ...
public void someMethodThatRequiresAList(List<Double> ds) { /* ... */ };
3 голосов
/ 31 июля 2011

Вы не можете преобразовать его в список переменного размера, но вы можете создать новый:

List<Double> myOtherList = new ArrayList<Double>(myList);
myOtherList.add(6.0);

Также обратите внимание, что myList представляет собой представление по массиву.Поэтому, если вы измените массив

   d[0] = 0.0;
   System.out.println(myList);

, вы получите [0.0, 4.0, 5.0]

Во многих случаях во многих случаях список с фиксированным размером будет работать нормально, но, конечно, это зависитна то, что вы делаете.Лично я часто использую Arrays.asList в тестовых случаях.

2 голосов
/ 05 июня 2012

Просто некоторые комментарии, документ Java говорит все это:

public static <T> List<T> asList(T... a)

Returns a fixed-size list backed by the specified array.

Внизу asList возвращает экземпляр Array.ArrayList, который отличается от java.util.ArrayList.Единственный метод, позволяющий изменить список:

public E set(int index, E element) {...}
1 голос
/ 31 июля 2011

Используется для создания представления массива как List, поэтому вы можете передать его многим методам, которые принимают List / Collection.

1 голос
/ 31 июля 2011

Из javadocs:

Этот метод действует как мост между API на основе массива и на основе коллекции в сочетании с Collection.toArray ().

Итак, если вы хотите иметь возможность передавать массив методу, ожидающему Collection, это обеспечивает удобный способ сделать это.

...