Массивы переменной длины (динамические) в Java

java arrays dynamic arraylist

406996 просмотра

9 ответа

Мне было интересно, как инициализировать целочисленный массив таким образом, чтобы его размер и значения менялись во время выполнения моей программы, какие-либо предложения?

Автор: Mohammad Sepahvand Источник Размещён: 12.11.2019 09:05

Ответы (9)


117 плюса

Решение

Да: используйте ArrayList .

В Java "нормальные" массивы имеют фиксированный размер. Вы должны дать им размер и не можете их расширять или сокращать. Чтобы изменить размер, вы должны создать новый массив и скопировать нужные вам данные, что неэффективно и причиняет вам боль.

К счастью, существуют всевозможные встроенные классы, которые реализуют общие структуры данных, а также другие полезные инструменты. Вы должны проверить API Java 6 для полного списка из них.

Одно предупреждение: ArrayList может содержать только объекты (например, целые числа), но не примитивы (например, целые). В большинстве случаев autoboxing / autounboxing позаботится об этом молча, но вы можете получить странное поведение в зависимости от того, что вы делаете.

Автор: Pops Размещён: 11.03.2010 04:24

36 плюса

Массивы в Java имеют фиксированный размер. Что вам нужно, так это ArrayList, одна из ряда чрезвычайно ценных коллекций, доступных на Java.

Вместо

Integer[] ints = new Integer[x]

ты используешь

List<Integer> ints = new ArrayList<Integer>();

Затем, чтобы изменить список, который вы используете, ints.add(y)и ints.remove(z)среди многих других удобных методов вы можете найти в соответствующих Javadocs.

Я настоятельно рекомендую изучить классы Collections, доступные в Java, так как они очень мощные и предоставляют вам множество встроенных функций, которые новички в Java стараются переписывать без необходимости.

Автор: MattGrommes Размещён: 11.03.2010 04:31

23 плюса

Массивы имеют фиксированный размер после создания экземпляра. Вы можете использовать список вместо.

Автобокс делает список пригодным для использования аналогично массиву, вы можете просто поместить в него значения int:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Автор: Mnementh Размещён: 11.03.2010 04:25

11 плюса

Я не согласен с предложением предыдущих ответов ArrayList, потому что ArrayListэто не динамический массив, а список, поддерживаемый массивом. Разница в том, что вы не можете сделать следующее:

ArrayList list = new ArrayList(4);
list.put(3,"Test");

Это даст вам исключение IndexOutOfBoundsException, потому что в этой позиции еще нет элемента, даже если резервный массив разрешил бы такое добавление. Поэтому вам нужно использовать настраиваемую расширяемую реализацию Array, как предложено @ randy-lance

Автор: cspann Размещён: 01.07.2013 07:18

10 плюса

Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below 

public class DynamicArray {
 static   int []increaseSizeOfArray(int []arr){
          int []brr=new int[(arr.length*2)];
          for (int i = 0; i < arr.length; i++) {
         brr[i]=arr[i];     
          }
          return brr;
     }
public static void main(String[] args) {
     int []arr=new int[5];
      for (int i = 0; i < 11; i++) {
          if (i<arr.length) {
              arr[i]=i+100;
          }
          else {
              arr=increaseSizeOfArray(arr);
              arr[i]=i+100;
          }        
     }

for (int i = 0; i < arr.length; i++) {
     System.out.println("arr="+arr[i]);
}    
}

}

Источник: Как сделать динамический массив

Автор: Anuj Dhiman Размещён: 25.11.2015 03:47

7 плюса

  1. Рекомендуется использовать List для работы с небольшими размерами.

  2. Если у вас огромное количество номеров, НИКОГДА не используйте Список и автобокс,

    Список <Целое число> список

Для каждого целого int автоматически создается новое целое число. Вы увидите, что это становится медленным, когда размер списка увеличивается. Эти целые числа являются ненужными объектами. В этом случае лучше использовать примерный размер,

int[] array = new int[ESTIMATED_SIZE];
Автор: Hao Deng Размещён: 07.07.2013 11:22

4 плюса

Как насчет использования Listвместо? Например,ArrayList<integer>

Автор: Konrad Garus Размещён: 11.03.2010 04:24

4 плюса

Вы не можете изменить размер массива. Однако вы можете создать новый массив с правильным размером и скопировать данные из старого массива в новый.

Но ваш лучший вариант - использовать IntList из Джакарты. ( здесь )

Он работает так же, как List, но занимает меньше места и более эффективен, чем тот, потому что он хранит int вместо хранения объектов-оболочек над int (это и есть класс Integer).

Автор: Thiago Chaves Размещён: 11.03.2010 04:24

-4 плюса

Я ответил на этот вопрос, и нет, вам не нужен массив или другое, это было задание, и я выполнил его, так что массивы могут увеличиваться в размерах. Вот ссылка Как использовать Java Dynamic Array, а вот ссылка на мой вопрос, на который я ответил Java Dynamic Arrays

Автор: Nobody Размещён: 13.04.2013 05:46
Вопросы из категории :
32x32