2011-07-31 23 views
3

Мне просто интересно, какая польза и цель метода asList() в Arrays.Что такое использование 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 

ответ

11

с Явой документы:

«Этот метод действует как мостик между массивом на основе сбора и на основе API-интерфейсами»

Для вашего вопроса;

Double[] d = {3.0, 4.0, 5.0}; 
List<Double> yourList = new ArrayList(Arrays.asList(d)); 
yourList.add(6.0); 
+0

+1, для обеспечения решения для исключения. – camickr

+0

/согласен с @camickr – Carl

1

Из Javadocs:

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

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

1

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

4

Для использования в других методах, которые требуют 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

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

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

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

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

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

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

public E set(int index, E element) {...} 
Смежные вопросы