Как установить значение по умолчанию для списка элементов?

Я пытаюсь преобразовать некоторый код python в java и нужно настроить значение по умолчанию для списка. Я знаю значение по умолчанию, размер списка и моя цель - установить значение по умолчанию, а затем в моей программе изменить их. В python я просто делаю это (для создания 10 элементов со значением нуля):

list = [0]*10

Я пытаюсь сделать:

List<integer> list1 = Arrays.asList(0*10); // it just multiples 0 by 10.
</integer>

Он делает работу, я знаю, что могу сделать что-то вроде этого:

for(int i = 0;i<10;i++)
{
 list1.add(0); 
}

Мне было интересно, есть ли лучший способ (вместо цикла for)?

7 ответов

Arrays.fill позволяет избежать цикла.

Integer[] integers = new Integer[10];
Arrays.fill(integers, 0);
List<integer> integerList = Arrays.asList(integers);
</integer>


Collections.nCopies является вашим другом, если вам нужен список вместо массива:

List<integer> list = Collections.nCopies(10, 0);
</integer>

Если необходим изменяемый список, оберните его:

List<integer> list = new ArrayList<>(Collections.nCopies(10, 0));
</integer>


Может быть, вам нужен массив?

int[] array = new int[10];

Вам нужен список, если вам нужно изменить его размер динамически. Если вам не нужна эта функция, массив может удовлетворить ваши потребности, и он автоматически инициализирует все значения до 0.


Насколько я знаю, в стандартные библиотеки ничего не встроено. Но вы можете легко написать такой метод один раз и вызвать его там, где хотите. Например:

public static <t> List<t> newArrayList(T value, int size) {
 List<t> list = new ArrayList<t>(size);
 for (int i = 0; i < size; i++) {
 list.add(value);
 }
 return list;
}
</t></t></t></t>

Если вы никогда не хотите изменять размер списка (т.е. добавлять или удалять элементы), ответ Майка Самуэля, вероятно, более эффективен. Также обратите внимание, что если вы используете изменяемый тип, вы можете не получить то, что хотите:

List<stringbuilder> list = newArrayList(new StringBuilder(), 10);
list.get(0).append("Foo");
System.out.println(list.get(5)); // Prints "Foo"
</stringbuilder>

... поскольку каждый элемент в списке будет ссылкой на тот же объект.


Вы можете попробовать:

List<integer> list1 = Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
</integer>

Есть 10 нулей. Вам нужно знать количество элементов во время компиляции, но у вас есть только одна строка. Если вы не знаете количество элементов во время компиляции, вы можете использовать предложенный подход Arrays.fill().


Я бы придерживался цикла for.

BTW... 0 * 10 = 0, поэтому просто введите нужную сумму

ArrayList<integer> list = new ArrayList<integer>(10);</integer> </integer>


В Java, на самом деле. Java довольно многословна, когда дело доходит до такого рода вещей, поэтому вы не можете сделать это очень просто, кроме цикла, как у вас.

licensed under cc by-sa 3.0 with attribution.