В Java нет встроенной операции конкатенации массивов. Поскольку массивы имеют фиксированный размер, для объединения двух массивов необходимо создать новый, больший массив и скопировать в него элементы. В этой статье рассматриваются три эффективных метода для достижения этого.
Содержание
- Использование
addAll()
из Apache Commons Lang - Использование
System.arraycopy()
- Ручная конкатенация с помощью циклов
Использование addAll()
из Apache Commons Lang
Библиотека Apache Commons Lang предоставляет удобный метод addAll()
в классе ArrayUtils
. Это значительно упрощает конкатенацию массивов. Сначала добавьте зависимость в свой проект (например, используя Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- Используйте последнюю версию -->
</dependency>
Затем используйте его следующим образом:
import org.apache.commons.lang3.ArrayUtils;
public class ArrayConcatenation {
public static void main(String[] args) {
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
int[] concatenatedArray = ArrayUtils.addAll(array1, array2);
for (int i : concatenatedArray) {
System.out.print(i + " "); // Вывод: 1 2 3 4 5 6
}
}
}
Этот подход чистый и эффективный, но вводит внешнюю зависимость.
Использование System.arraycopy()
Встроенный в Java метод System.arraycopy()
предоставляет нативное решение. Этот метод копирует часть одного массива в другой. Он требует ручного создания массива и управления индексами:
public class ArrayConcatenation {
public static void main(String[] args) {
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
int[] concatenatedArray = new int[array1.length + array2.length];
System.arraycopy(array1, 0, concatenatedArray, 0, array1.length);
System.arraycopy(array2, 0, concatenatedArray, array1.length, array2.length);
for (int i : concatenatedArray) {
System.out.print(i + " "); // Вывод: 1 2 3 4 5 6
}
}
}
Этот метод эффективен и не использует внешних библиотек, но менее лаконичен.
Ручная конкатенация с помощью циклов
Более явный, хотя и менее эффективный, подход включает итерацию по обоим массивам и заполнение нового массива:
public class ArrayConcatenation {
public static void main(String[] args) {
int[] array1 = {1, 2, 3};
int[] array2 = {4, 5, 6};
int[] concatenatedArray = new int[array1.length + array2.length];
for (int i = 0; i < array1.length; i++) {
concatenatedArray[i] = array1[i];
}
for (int i = 0; i < array2.length; i++) {
concatenatedArray[array1.length + i] = array2[i];
}
for (int i : concatenatedArray) {
System.out.print(i + " "); // Вывод: 1 2 3 4 5 6
}
}
}
Этот метод прост и понятен, что делает его подходящим для начинающих. Однако он менее эффективен, чем другие методы, особенно для больших массивов.
Оптимальный подход зависит от ваших приоритетов: addAll()
обеспечивает лаконичность, arraycopy()
обеспечивает эффективность без внешних библиотек, а ручной цикл обеспечивает ясность. Не забудьте изменить код для разных типов массивов (например, String[]
, double[]
).