2015-07-02 7 views
3

Рассмотрим следующий перечисление:Порядок элементов списка в

public enum Type{ 
    INTEGER, 
    DOUBLE, 
    BOOLEAN 
} 

Теперь у меня есть следующие строки:

List<Type> types = Arrays.asList(Type.values()); 

Do список содержит элементы в том же порядке, помещенного в перечислении? Является ли этот заказ надежным?

ответ

0

Если вы хотите сохранить порядок элементов использовать LinkedList: -

List<Type> types = new LinkedList<Type>(Arrays.asList(Type.values()));

+0

Мне нужно сохранить в том же порядке, как они были введены в перечислении. – user3663882

+0

Я имею в виду надежный заказ – user3663882

+0

Да, заказ будет поддерживать 'LinkedList', но что вы подразумеваете под * надежным * –

4

Да. В Java Language Specification for Enums состоянии:

/** 
* Returns an array containing the constants of this enum 
* type, in the order they're declared. This method may be 
* used to iterate over the constants as follows: 
* 
* for(E c : E.values()) 
*  System.out.println(c); 
* 
* @return an array containing the constants of this enum 
* type, in the order they're declared 
*/ 
public static E[] values(); 

Он будет возвращен массив с константами, как они объявлены.

Что касается метода Arrays.asList(), вы можете рассчитывать на его порядок, а также:

Возвращает список фиксированного размера, поддержанный указанным массивом. (Изменения в возвращаемом списке «запись через» в массив.)

Рассмотрим следующий пример, который является весьма распространенным способом инициализировать List:

List<String> stooges = Arrays.asList("Larry", "Moe", "Curly"); 

Порядок списка будет быть таким же, как в массиве.

+0

Итак, да, ясно, что порядок массива будет соответствовать единице перечисления. Но как насчет метода 'Arrays.asList()'? Указано, что метод не изменяет порядок? – user3663882

+0

Итак, я не нашел порядок списка, возвращенный Arrays.asList, надежный. [docs] (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList (T ...)) Я думаю, если нам нужен надежный заказ, мы будем иметь построить собственный список ... – user3663882

+0

Порядок 'asList()' предсказуем, я прояснил это в своем ответе. – Magnilex

2

JLS упоминает, что values()«Возвращает массив, содержащий константы этого типа перечисления, в том порядке, в котором они объявлены». (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.9). Так что да, вы можете считать, что порядок будет такой же, пока ваш перечислимого типа не меняет

Для некоторых деталей см How is values() implemented for Java 6 enums?

Смежные вопросы