编写一个合并两个数组列表的方法,交替使用两个数组列表中的元素

写一个方法

public static ArrayList merge(ArrayList a,ArrayList b)

合并两个数组列表,交替两个数组列表中的元素。 如果一个数组列表比另一个更短,则只要可以替换,然后从较长的数组列表中追加剩余的elemts。 例如,如果是

1 4 9 16

而b是

9 7 4 9 11

然后merge返回数组列表

1 9 4 7 9 4 16 9 11


我尝试做的是用if语句编写一个for循环,这样当一个偶数(i%2 == 0)时,一个数字被添加到数组列表a的合并数组列表中,当我是一个数组时,从数组列表b中添加一个数字奇数。 然而,我不知道如何处理一个数组列表可能比另一个更长的事实。 有人可以帮帮我吗?

编辑 :好的,这是代码(但它远非正确):

public static ArrayList merge(ArrayList een, ArrayList twee) { ArrayList merged = new ArrayList(); for(int i = 0; i<100; i++) { if(i%2!=0) { merged.add(a.get(i)); } if(i%2 == 0) { merged.add(b.get(i)); } } System.out.println(merged); return merged; } 

没有迭代器:

 public static ArrayList merge(ArrayList a, ArrayList b) { int c1 = 0, c2 = 0; ArrayList res = new ArrayList(); while(c1 < a.size() || c2 < b.size()) { if(c1 < a.size()) res.add((Integer) a.get(c1++)); if(c2 < b.size()) res.add((Integer) b.get(c2++)); } return res; } 

迭代器似乎最容易做到这一点

 public static  ArrayList merge(Collection a, Collection b) { Iterator itA = a.iterator(); Iterator itB = b.iterator(); ArrayList result = new ArrayList(); while (itA.hasNext() || itB.hasNext()) { if (itA.hasNext()) result.add(itA.next()); if (itB.hasNext()) result.add(itB.next()); } return result; } 

没有迭代器:

 public static  ArrayList merge(List a, List b) { ArrayList result = new ArrayList(); int size = Math.max(a.size(), b.size()); for (int i = 0; i < size; i++) { if (i < a.size()) result.add(a.get(i)); if (i < b.size()) result.add(b.get(i)); } return result; } 

注意,我稍微放松了方法签名。 如果你使用迭代器实现合并, Collection (甚至是Iterable )就可以了。 否则, List会这样做。 无需将ArrayList作为方法参数类型

试试这个:我用Array实现了。

 public static void main(String[] args) { int[] first = { 1, 4, 9, 16 }; int[] second = { 9, 7, 4, 9, 11 }; int[] merge = new int[first.length + second.length]; int j = 0, k = 0, l = 0; int max = Math.max(first.length, second.length); for (int i = 0; i < max; i++) { if (j < first.length) merge[l++] = first[j++]; if (k < second.length) merge[l++] = second[k++]; } System.out.println(Arrays.toString(merge)); } 

输出:

 [1, 9, 4, 7, 9, 4, 16, 9, 11] 

您不需要检查模数,或者您将跳过每个输入列表中的每个第二个元素。

 public static  List merge(List een, List twee) { List merged = new ArrayList(een.size() + twee.size()); List shorter = een.size() <= twee.size() ? een : twee; List longer = een.size() > twee.size() ? een : twee; for (int i = 0; i < shorter.size(); i++) { merged.add(een.get(i)); merged.add(twee.get(i)); } for (int i = shorter.size(); i < longer.size(); i++) { merged.add(longer.get(i)); } return merged; } 

此通用版本适用于所有类型的列表和generics类型。

这是我的解决方案

 LinkedList list3 = new LinkedList(); Iterator itA = list.iterator(); Iterator itB = list2.iterator(); while(itA.hasNext() && itB.hasNext()){ list3.add(itA.next()); list3.add(itB.next()); } 

尝试这个

 Iterator iterator1 = arr1.iterator(); Iterator iterator2 = arr2.iterator(); while (iterator1.hasNext() || iterator2.hasNext()) { if(iterator1.hasNext()){ mergerArr.add(iterator1.next()); } if(iterator2.hasNext()){ mergerArr.add(iterator2.next()); } } 

Array1 = {1,2,3} Array2 = {a,b,c,d,e}

输出= {1,a,2,b,3,c,d,e}

公共类MergeArray {

 public static void main(String args[]) { char [] arr1= {'1','2','3'}; char [] arr2= {'a','b','c','d','e'}; int l1= arr1.length; int l2=arr2.length; int l3=l1+l2; char [] arr3=new char[l1+l2]; int i=0; int j=0; int k=0; int m=0; int r=0; if(l1 

}

我在php中以下面的方式完成了这个:

 "; } ?>