Создание нового массива с содержимым из старого массива при сохранении старого массива статичным - PullRequest
12 голосов
/ 19 ноября 2011

Скажем, у меня есть массив целых чисел,

int[] array = new int[7];
for(int i = 0; i < 7; i++)
{
array[i] = i;
}

Теперь я хочу получить только первые четыре числа в этом array и включить его в другой массив.

Так что я действительно хочу что-то вроде ...

newArray = array[0-3].

Я знаю, что синтаксис неправильный, но я просто даю общее представление о том, что я пытаюсь сделать, эточто-нибудь подобное возможно?Или мне нужно создать цикл и добавить его вручную в newArray?

Ответы [ 4 ]

31 голосов
/ 19 ноября 2011

Метод 1

int[] newArr = new int[4];
System.arraycopy(array, 0, newArr, 0, 4);

Метод принимает пять аргументов:

  1. src: исходный массив.
  2. srcPosition: позиция в источнике, с которой вы хотите начать копирование.
  3. des: массив назначения.
  4. desPosition: позиция в массиве назначения, куда копируетсядолжен начинаться.
  5. length: количество копируемых элементов.

Этот метод генерирует исключение NullPointerException, если любой из src или des равен нулю.Он также генерирует ArrayStoreException в следующих случаях:

  • Если src не является массивом.
  • Если des не является массивом.
  • Если src иdes - это массивы разных типов данных.

Метод 2

Использование

Arrays.copyOf(array,4) для копирования первых 4 элементов, усечениеrest.

из

Arrays.copyOfRange(array,1,5) для копирования элементов 1-4, если вам нужна середина массива.

10 голосов
/ 19 ноября 2011
int[] newArray = Arrays.copyOf(array,4);
2 голосов
/ 19 ноября 2011

Вы можете использовать copyOfRange для этой цели, которая копирует указанный диапазон указанного массива в новый массив.

copyOfRange(byte[] original,
                 int from,
                 int to)

Параметры:

оригинал - массив, из которого должен быть скопирован диапазон

from - начальный индекс копируемого диапазона, включительно

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

2 голосов
/ 19 ноября 2011

Вы можете создать новый массив в нужном вам размере (в данном случае 4), а затем использовать System.arrayCopy , чтобы скопировать содержимое из одного массива в другой.

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