Это относительно простая проблема, которую можно решить несколькими способами.Проще всего было бы, так как это статический пример, который вы привели, сделать что-то вроде
c[0] = a[0];
c[1] = a[1];
c[2] = a[2];
c[3] = b[0];
.
.
.
c[11] = b[5]
Это не очень хорошо масштабируется и его сложно поддерживать, но технически выполняет то, что вы просите.
Далее я бы просто посмотрел на петли.В предыдущей версии этого поста я не включал их, поскольку видел другие ответы с ними, но с тех пор добавил это, поскольку я думал, что они могут быть улучшены:
// Using loops
final int[] c = new int[12];
for (int i = 0; i < 3; ++i) {
c[i] = a[i];
c[i + 3] = b[i];
c[i + 6] = a[i + 3];
c[i + 9] = b[i + 3];
}
Это также очень просто иэффективный.Нам нужно всего 3 итерации цикла, чтобы покрыть обе половины массива, используя смещения, чтобы избежать необходимости создавать несколько циклов for для каждой части.Знания для этого вида просты приходят через опыт, поэтому я бы порекомендовал проработать еще несколько примеров.
Далее мы рассмотрим еще несколько забавных вариантов.Если вы не знакомы с Java API, я бы порекомендовал сначала поискать в Google различные вещи, такие как «java copy часть массива» или «java вставка массива в другой массив».
Такие поиски приводят к таким сообщениям, как:
Раздел копирования Java массива
Вставка массива в другой массив
Как использовать subList ()
Оттуда вы можете составить достаточно четко определенный ответ, такой как:
// Using System::arraycopy<T>(T[], int, T[], int, int), where T is the array-type.
final int[] c = new int[12];
System.arraycopy(a, 0, c, 0, 3);
System.arraycopy(b, 0, c, 3, 3);
System.arraycopy(a, 3, c, 6, 3);
System.arraycopy(b, 3, c, 9, 3);
Что, вероятно, достаточно для большинства ваших потребностей.
Но, пройдя этот процесс, я узнал еще один способ сделать это с потоками!
// Using java.util.stream
final List<Integer> l_a = Arrays.stream(a).boxed().collect(Collectors.toList());
final List<Integer> l_b = Arrays.stream(b).boxed().collect(Collectors.toList());
final List<Integer> l_c = new ArrayList<Integer>() {{
addAll(l_a.subList(0, 3));
addAll(l_b.subList(0, 3));
addAll(l_a.subList(3, 6));
addAll(l_b.subList(3, 6));
}};
final int[] c = l_c.stream().mapToInt(i -> i).toArray();
И хотя этот последний пример, возможно, менее изящен, чем второй, проходящий через процессисследования проблемы и возможных решений научили меня кое-чему, что я могу теперь нести с собой в будущем.
Надеюсь, это поможет!