2015-02-18 2 views
2

Ну, привет! Я делаю игру под названием DoorElementals, и я хочу сделать это:Добавление массива в ArrayList

ArrayList<Color> colors = new ArrayList<Color>(); 
public Door(Color... colors) { 
    this.colors.add(colors); 
} 
public void addColor(Color... c){ 
    this.colors.add(c); 
} 

colors Но это массив, а this.colors является ArrayList. Как мне это сделать?

+0

Если вы хотите добавить массив 'Color' в' ArrayList' изменить его как 'ArrayList цвета = новый ArrayList <>();' – SubOptimal

+2

Вы пробовали 'addAll (Arrays.asList (colors))'? –

+0

Простой 'for (Цвет c: colors) {this.colors.add (c);}' работает тоже. – njzk2

ответ

1

НЕ ИСПОЛЬЗУЙТЕ Arrays.asList. В зависимости от количества вызовов, которые вы делаете, это будет влиять на производительность, так как каждый раз, когда вы вызываете метод asList, создается новый List.

Вы можете и должны, использование:

public Door(Color... colors) { 
    addAll(colors); 
} 

public void addAll(Color... colors) { 
    for (Color color : colors) { 
    myList.add(color); 
    } 
} 
+0

Будучи мной, я не помню, чтобы вы могли вызывать методы внутри конструктора. Благодаря! – TsundereBug

2

Класс java.util.Arrays предоставляет способ преобразования из массива в List.

ArrayList<Color> colors = new ArrayList<Color>(); 
public Door(Color... colors) { 
    this.colors.addAll(Arrays.asList(colors)); 
} 
public void addColor(Color... c){ 
    this.colors.addAll(Arrays.asList(c)); 
} 

Лучше практика будет сделать ваш конструктор взять Collection вместо того, чтобы с помощью переменного числа аргументов.

List<Color> colors = new ArrayList<Color>(); 
public Door(Collection<Color> colors) { 
    this.colors.addAll(colors); 
} 
+3

'Лучшая практика 'не обязательно. Варгары классные. – njzk2

+1

У вас всегда есть этот дуализм в Java: мир массива против мира коллекций. Я не думаю, что действительно важно, кто с этим справляется. Библиотека предоставляет функции для выполнения трюка. Так что, возможно, если нет оптимизационных причин для реализации обеих версий, просто проще реализовать только лучший, и пусть пользователь конвертирует, если ему это нужно. Это имеет то преимущество, что неявно подталкивает пользователя к использованию быстрой версии всякий раз, когда он может. –

+0

Конечно, варгары классные, но это не делает их хорошей практикой. –

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