System.arraycopy()
Копирует часть одного массива в другой (или в тот же) массив.
Доступно с: Java 1.0
Синтаксис
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| src | Object | Массив-источник. |
| srcPos | int | Индекс, с которого начинается копирование в источнике. |
| dest | Object | Массив-приёмник. |
| destPos | int | Индекс, куда кладётся первый скопированный элемент. |
| length | int | Сколько элементов скопировать. |
Примеры
Копирование трёх элементов из середины массива:
void main() {
int[] source = {10, 20, 30, 40, 50};
int[] target = new int[5];
System.arraycopy(source, 1, target, 0, 3);
IO.println(Arrays.toString(target));
}Результат:
[20, 30, 40, 0, 0]Сдвиг внутри одного массива, чтобы освободить место для вставки:
void main() {
int[] data = {1, 2, 4, 5, 0};
System.arraycopy(data, 2, data, 3, 2);
data[2] = 3;
IO.println(Arrays.toString(data));
}Результат:
[1, 2, 3, 4, 5]Выход за границы массива:
void main() {
int[] small = {1, 2, 3};
System.arraycopy(small, 1, new int[10], 0, 5);
}Результат:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: arraycopy: last source index 6 out of bounds for int[3]Примечания
Метод ничего не создаёт: приёмник должен существовать и иметь достаточный размер. Перекрывающиеся области одного массива копируются правильно. Если нужен новый массив, проще Arrays.copyOf() или Arrays.copyOfRange() — они сами создают массив нужной длины. Типы элементов должны совпадать, иначе будет ArrayStoreException.
См. также
- Arrays.copyOf() — Копирует массив в новый — той же или другой длины. Часть массива копирует copyOfRange().
- Arrays.fill() — Заполняет весь массив или его часть одним значением.
- array.length — Длина массива — количество элементов. Поле, а не метод: пишется без скобок.
В учебнике
- Класс Arrays — Утилиты класса java.util.Arrays: toString, sort, fill, copyOf, copyOfRange, equals и binarySearch.