public class Merger { public String[] merge(String[] arr1, String[] arr2) { int l1 = 0; int l2 = 0; int oi = 0; int step = 0; String[] outt = new String[arr1.length + arr2.length]; while (l1 < arr1.length && l2 < arr2.length) { if (step == 0 || step ==1) { outt[oi++] = arr1[l1++]; } if (step==2) { outt[oi++] = arr2[l2++]; } step++; if (step>2) step=0; } while (l1 < arr1.length) { outt[oi++] = arr1[l1++]; } while (l2 < arr2.length) { outt[oi++] = arr2[l2++]; } return outt; } private class AA implements Comparable { String b; public AA(String b) { this.b = b; } public void upd(String ss) { b = ss; } @Override public String toString() { return "AA=" + b; } @Override public int compareTo(Merger.AA o) { return this.b.compareTo(o.b); } } public > T[] mergeG(T[] arr1, T[] arr2) { int l1 = 0; int l2 = 0; int oi = 0; int step = 0; T[] outt = (T[]) new Comparable[arr1.length + arr2.length]; while (l1 < arr1.length && l2 < arr2.length) { if (step == 0 || step ==1) { outt[oi++] = arr1[l1++]; } if (step==2) { outt[oi++] = arr2[l2++]; } step++; if (step>2) step=0; } while (l1 < arr1.length) { outt[oi++] = arr1[l1++]; } while (l2 < arr2.length) { outt[oi++] = arr2[l2++]; } return outt; } public static void main(String[] args) { new Merger().doo(); } public void doo() { String[] aa = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k" }; String[] bb = { "A", "B", "C", "D", "E", "F", "G" }; String[] cc = merge(aa, bb); String s = (String) cc[0]; for (int i = 0; i < cc.length; i++) System.out.println(cc[i]); AA[] aa1 = new AA[aa.length]; for (int i = 0; i < aa.length; i++) aa1[i] = new AA(aa[i]); AA[] bb1 = new AA[bb.length]; for (int i=0; i[] cc1 = new Merger().mergeG(aa1, bb1); for (int i = 0; i < cc1.length; i++) { AA ar = (AA) cc1[i]; System.out.println(ar); } } }