[英]merging two sorted arraylist into one sorted 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}。 我該如何解決?
使用stream的答案是正確的,但是為了完整起見,我想從您的代碼開始提供解決方案。
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++));
如果i < array1.size()
或j < array2.size()
條件之一失敗,則for
循環將退出,這意味着它將不處理(和排序)另一個數組中的剩余元素。
這是連接和排序兩個數組的stream
方法:
int[] a1 = new int[]{1,3,5};
int[] a2 = new int[]{2,4,6};
List<Integer> result = IntStream.concat(Arrays.stream(a1), Arrays.stream(a2))
.boxed()
.sorted()
.collect(Collectors.toList());
System.out.println(result);
在兩個列表的末尾添加Integer Max Value,並將and
condition更改為or
condition
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
在上面的代碼中,您的使用條件為i <array1.size()&& j <array2.size(),因此如果一個列表首先用盡,則它將退出循環並且將不處理第二個列表中的其余元素。如果計數器未到達末尾,則需要循環處理列表。
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++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.