在list1中合并两个arraylist列表,同时保持排序

时间:2012-10-25 13:24:14

标签: java arraylist

在我的作业中,第三步是调用方法合并以合并list1中的两个列表,以便list1 保持排序。

我编写了我的代码但它运行不正常,输出显示错误,因为它很重要

 public static void merge (ArrayList<Integer> list1, ArrayList<Integer> list2)
 {
        int i;
        int n=list1.size();
        int pos , j=0;

        for (pos =0 ;pos<n ; pos++)
        {
            for ( i=0 ; i<n ; i++)
                if (list1.get(j)>list2.get(pos))
                    list1.add(pos,list2.get(pos));
                else 
                    j++;
       } 
 }

7 个答案:

答案 0 :(得分:8)

假设两个列表都已排序,您只需要一个for循环:

public static void merge(List<Integer> l1, List<Integer> l2) {
    for (int index1 = 0, index2 = 0; index2 < l2.size(); index1++) {
        if (index1 == l1.size() || l1.get(index1) > l2.get(index2)) {
            l1.add(index1, l2.get(index2++));
        }
    }
}  

如果未对l2进行排序,则需要两个循环:

public static void merge(List<Integer> l1, List<Integer> l2) {
    for (int index2 = 0; index2 < l2.size(); index2++) {
        for (int index1 = 0; ; index1++) {
            if (index1 == l1.size() || l1.get(index1) > l2.get(index2)) {
                l1.add(index1, l2.get(index2));
                break;
            }
        }
    }
}

答案 1 :(得分:2)

轻松修复:事后排序。

list1.addAll(list2);
Collections.sort(list1);

使用集合来避免重复。

答案 2 :(得分:1)

public static void merge (ArrayList<Integer> list1, ArrayList<Integer> list2)
{
    list1.addAll(list2);
    Collections.sort(list1);
}

答案 3 :(得分:0)

合并列表后,请调用sort方法,如下所示。

Collections.sort(list1); // carries out natural ordering.

如果您需要自定义排序,请使用Comparator对象

Collections.sort(list1, comparatorObject);

查看Comparator example了解详情。

以下是您修改后的代码:

 public static void merge (ArrayList<Integer> list1, ArrayList<Integer> list2)
 {
    list1.add(list2); //merges list 2 to list1
    Collections.sort(list1); //natural ordering
 }

答案 4 :(得分:0)

如果输入列表不是太长,我建议只合并列表并使用Collections.sort()方法恢复订单:

public static void mergeAndSort(List<Integer> list1, List<Integer> list2) {
    List<Integer> combinedList = new ArrayList<Integer>(list1);
    combinedList.addAll(list2);
    Collections.sort(combinedList);
    return combinedList;
}

作为旁注,您应尽可能使用List接口而不是ArrayList实现类。

答案 5 :(得分:0)

def BinarySearchTree
    def initialize
        @find_work_node = ...
    end
end

}

答案 6 :(得分:-2)

     ArrayList<Integer> a = new ArrayList();
     ArrayList<Integer> b = new ArrayList();
     ArrayList<Integer> c = new ArrayList();

     a.add(1);
     a.add(3);
     a.add(5);
     a.add(7);
     a.add(17);
     a.add(27);
     a.add(37);

     b.add(0); 
     b.add(2);
     b.add(4);

     while( a.size() > 0 || b.size() >0){

        if( a.size() == 0 || b.size() == 0){
            c.addAll(b);
            c.addAll(a);
            break;
        }

        if(a.get(0) < b.get(0)){
            c.add(a.get(0));
            a.remove(0);
        }
        else{
            c.add(b.get(0));
            b.remove(0);
        }

    }

    System.out.println(c.toString());