将两个已排序的arraylist合并为一个已排序的arraylist

时间:2017-05-20 17:28:46

标签: java sorting arraylist

这是我的代码:

 for (int i = 0, j = 0; i < array1.size() && j < array2.size();) {
    if (array1.get(i) < array2.get(j)) {
        list.add(array1.get(i));
        i++;
    } else {
        list.add(array2.get(j));
        j++;
    }
}

问题在于我无法达到最大数量。例如,如果我有两个数组{1,3,5}和{2,4,6},那么该代码会给我{1,2,3,4,5}。我该如何解决?

4 个答案:

答案 0 :(得分:1)

使用流的答案是正确的,但我想从您的代码开始提供完整性的解决方案。

int i, j;
for (i = 0, j = 0; i < array1.size() && j < array2.size();) {
    if (array1.get(i) < array2.get(j)) {
        list.add(array1.get(i));
        i++;
    } else {
        list.add(array2.get(j));
        j++;
    }
}

while(i < array1.size()) list.add(array1.get(i++));
while(j < array2.size()) list.add(array2.get(j++));

答案 1 :(得分:0)

如果body { /* this will apply to the whole body tag */ font-family: AvantGarde; font-size: 25px; font-family: "AvantGarde"; color: rgb(255, 255, 255); text-transform: uppercase; line-height: 1.792; text-align: left; -moz-transform: matrix( 1.65479981820633,0,0,1.66565153423699,0,0); -webkit-transform: matrix( 1.65479981820633,0,0,1.66565153423699,0,0); -ms-transform: matrix( 1.65479981820633,0,0,1.66565153423699,0,0); } @font-face { font-family: AvantGarde; src: url(AvantGarde.woff); } for条件之一失败,则i < array1.size()循环将退出,这意味着它不会处理(和排序)其他数组中的其余元素。

这是连接和排序两个数组的j < array2.size()方法:

stream

答案 2 :(得分:0)

在两个列表的末尾添加整数最大值,并将and条件更改为or条件

List<Integer> array1 = new ArrayList<>(Arrays.asList(1, 3, 5));
List<Integer> array2 = new ArrayList<>(Arrays.asList(2, 4, 6));

List<Integer> list = new ArrayList<>();

array1.add(Integer.MAX_VALUE); //Add Integer Max Value
array2.add(Integer.MAX_VALUE); //Add Integer Max Value

for (int i = 0, j = 0; i < array1.size() - 1 || j < array2.size() - 1; ) {
    if (array1.get(i) < array2.get(j)) {
        list.add(array1.get(i));
        i++;
    } else {
        list.add(array2.get(j));
        j++;
    }
}

System.out.println(list);

array1.remove(array1.size() - 1); //Remove Integer Max Value
array2.remove(array2.size() - 1); //Remove Integer Max Value

答案 3 :(得分:0)

在你的代码上面你的使用条件i&lt; array1.size()&amp;&amp; j&lt; array2.size()所以如果一个列表首先耗尽,那么它将退出循环并且不会处理第二个列表中的剩余元素。因此,如果计数器未到达结束,则需要处理该列表。< / p>

 int i = 0;
            int j = 0;
            while (i < array1.size() && j < array2.size()) {
                if (array1.get(i) < array2.get(j)) {
                    list.add(array1.get(i));
                    i++;
                } else {
                    list.add(array2.get(j));
                    j++;
                }
            }
            while (i < array1.size()) {
                list.add(array1.get(i));
                i++;
            }
            while (j < array2.size()) {
                list.add(array2.get(j));
                j++;
            }