Как объединить два массива в Java? Простой способ конкатенации
Использование System.arraycopy() — классический способ
Самый распространённый и эффективный способ объединить два массива в Java — использовать встроенный метод System.arraycopy(). Он работает быстро, так как является native-методом. Вот как это сделать:
public class ArrayConcatenation {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {4, 5, 6};
// Создаём новый массив нужной длины
int[] c = new int[a.length + b.length];
// Копируем элементы первого массива
System.arraycopy(a, 0, c, 0, a.length);
// Копируем элементы второго массива
System.arraycopy(b, 0, c, a.length, b.length);
// Вывод результата
System.out.println(Arrays.toString(c)); // [1, 2, 3, 4, 5, 6]
}
}
Разбор параметров System.arraycopy():
src— исходный массив (откуда копируем)srcPos— начальная позиция в исходном массиве (обычно 0)dest— целевой массив (куда копируем)destPos— начальная позиция в целевом массиве (для второго массива —a.length)length— количество копируемых элементов
Этот метод подходит для любых типов массивов: примитивных (int[], double[]) и ссылочных (String[], Object[]).
Универсальный метод для любых типов
Чтобы не писать один и тот же код каждый раз, создайте вспомогательный метод:
public static <T> T[] concatenate(T[] first, T[] second) {
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
Использование:
String[] names1 = {"Alice", "Bob"};
String[] names2 = {"Charlie", "Diana"};
String[] allNames = concatenate(names1, names2);
System.out.println(Arrays.toString(allNames)); // [Alice, Bob, Charlie, Diana]
Современный способ через Stream API (Java 8+)
Если вы используете Java 8 или новее, можно применить Stream API. Это более декларативный подход, хотя и менее производительный:
import java.util.stream.Stream;
String[] arr1 = {"A", "B"};
String[] arr2 = {"C", "D"};
String[] result = Stream.concat(Arrays.stream(arr1), Arrays.stream(arr2))
.toArray(String[]::new);
Для примитивных массивов используйте IntStream, LongStream или DoubleStream:
int[] a = {1, 2, 3};
int[] b = {4, 5, 6};
int[] c = IntStream.concat(Arrays.stream(a), Arrays.stream(b)).toArray();
Что выбрать?
- Для максимальной производительности — используйте
System.arraycopy(). - Для читаемости и гибкости (особенно с объектами) — Stream API.
- Если работаете с коллекциями — конвертируйте в
Listи обратно:List<Integer> combined = new ArrayList<>(Arrays.asList(a)); combined.addAll(Arrays.asList(b));
Все эти подходы решают вашу задачу. Выбирайте тот, который лучше подходит под ваш стиль кода и требования к производительности.
<<Использование Arrays.copyOf() и циклов
Если вы не хотите использовать System.arraycopy(), можно обойтись методами из java.util.Arrays:
int[] a = {1, 2, 3};
int[] b = {4, 5, 6};
int[] c = Arrays.copyOf(a, a.length + b.length);
for (int i = 0; i < b.length; i++) {
c[a.length + i] = b[i];
}
Arrays.copyOf() создаёт новый массив указанной длины и копирует в него элементы из исходного. Затем мы вручную добавляем элементы второго массива. Этот способ более наглядный для новичков, но менее производительный, чем System.arraycopy().
Для массивов объектов — через List
Если вы работаете с массивами объектов (например, String[]), можно временно преобразовать их в список:
String[] a = {"x", "y"};
String[] b = {"z"};
List<String> list = new ArrayList<>(Arrays.asList(a));
list.addAll(Arrays.asList(b));
String[] c = list.toArray(new String[0]);
Этот подход удобен, когда нужно не только объединить, но и выполнить дополнительные операции (например, удалить дубликаты). Однако он создаёт лишние объекты, поэтому для больших массивов лучше использовать System.arraycopy().
Совет: если вы часто выполняете конкатенацию, рассмотрите использование ArrayList вместо массивов — он поддерживает динамическое добавление элементов.
Ответов пока нет.
Войдите чтобы оставить ответ