Как расширить массив в Java без изменения его имени - PullRequest
9 голосов
/ 16 декабря 2010

Интересно, возможно ли расширить массив в Java, но не меняя его имени, поскольку у меня есть несколько методов, связанных с этим массивом. Я думал о создании нового массива с тем же именем, но в два раза большим, а затем скопировать все элементы из первого массива во второй. Возможно ли это?
По сути, я хочу создать массив со счетами в банке, и если клиент создает так много средств, что в массиве недостаточно элементов, он должен расширяться.
Спасибо за любые ответы!

Ответы [ 5 ]

9 голосов
/ 07 декабря 2014

Даже если использование ArrayList, вероятно, является хорошим советом во многих обстоятельствах, существуют вполне законные случаи использования простых старых массивов .

В этом случае, если вам нужно изменить размер массива, вы можете исследовать один из методов java.utils.Arrays.copyOf. Обратите внимание, однако, что они не будут на самом деле изменять размер вашего массива. Они просто создадут новый массив и скопируют общие элементы.

Если новый массив имеет размер больше, чем старый, новые элементы будут инициализированы до некоторого значения по умолчанию (то есть: false для boolean[], null для T[] - см. Документацию для подробности). Вы должны использовать эти функции так:

myArray = copyOf(myArray, myNewSize); 

Помните, однако, что этот метод всегда будет возвращать массив new . Даже если запрашиваемый размер совпадает с оригинальным. Если это в не желательно, вам придется написать что-то вроде этого:

myArray = (myNewSize > myArray.length) ? copyOf(myArray, myNewSize) : myArray;
9 голосов
/ 16 декабря 2010

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

Но вы не должны этого делать.

Вместо массива используйте любую реализацию java.util.List. ArrayList хороший выбор для этого случая, я думаю.

5 голосов
/ 30 марта 2013

Вот метод, который я написал для моего класса программирования Java

private static double[] extendArraySize(double [] array){
    double [] temp = array.clone();
    array = new double[array.length + 1];
    System.arraycopy(temp, 0, array, 0, temp.length);
    return array;
}

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

пример:

double [] z = {1,2,3};  //size of z = 3; [0,1,2]   VALUES: [1,2,3]
z = extendArraySize(z); //size of z = 4; [0,1,2,3] VALUES: [1,2,3,0];

Извините, если это объясняется ужасно, и яуверен, что есть лучший способ сделать это VIA векторов или ArrayLists.Но если вы хотите расширить массив примитивов, это один из способов сделать это.

Надеюсь, я помог = D

3 голосов
/ 16 декабря 2010

Используйте ArrayList , он сделает все это за вас.Просто позвоните add() или addAll(), чтобы добавить материал.

0 голосов
/ 05 мая 2016
public static void extendarrayafterinitialization(int [] x){
        Scanner input =new Scanner(System.in);
        System.out.print("How many values do you need to insert to the Array : ");
        int how=input.nextInt();
        int length=x.length+how;
        int [] all=new int[length];
        int value=0;
        System.out.println(length);
        for(int i=0;i<x.length;i++){
            all[i]=x[i];
            }
            for(int j=x.length;j<length;j++){
                System.out.print("Enter new value : ");
                int index=input.nextInt();
                all[j]=index;
                }
        for(int print : all){
            System.out.println(print);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...