Java黑皮书课后题第7章:**7.31(合并两个有序列表)编写下面的方法,将两个有序列表合并成一个新的有序列表。编写一个测试程序输入两个有序列表,显示合并后的列表
时间: 2024-10-07 19:05:58 浏览: 27
在Java中,要合并两个有序列表,可以创建一个新的列表,然后遍历每个源列表,依次添加元素到新列表中。这里我们可以使用ArrayList作为容器,因为它支持动态扩容。以下是`mergeSortedLists`方法的实现:
```java
import java.util.ArrayList;
import java.util.List;
public class ListMerger {
public static <T extends Comparable<T>> List<T> mergeSortedLists(List<T> list1, List<T> list2) {
if (list1 == null || list1.isEmpty()) return list2;
if (list2 == null || list2.isEmpty()) return list1;
ArrayList<T> mergedList = new ArrayList<>(list1);
int i = 0, j = 0;
while (i < list1.size() && j < list2.size()) {
if (list1.get(i).compareTo(list2.get(j)) <= 0) {
mergedList.add(list1.get(i));
i++;
} else {
mergedList.add(list2.get(j));
j++;
}
}
// 如果list1还有剩余元素没加,直接追加
while (i < list1.size()) {
mergedList.add(list1.get(i));
i++;
}
// 如果list2还有剩余元素没加,也追加
while (j < list2.size()) {
mergedList.add(list2.get(j));
j++;
}
return mergedList;
}
}
```
为了测试这个方法,你可以创建一个简单的主程序:
```java
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list1 = Arrays.asList(1, 3, 5, 7);
List<Integer> list2 = Arrays.asList(2, 4, 6, 8);
List<Integer> mergedList = ListMerger.mergeSortedLists(list1, list2);
System.out.println("Merged sorted list: " + mergedList);
}
}
```
当你运行这段代码时,它会输出合并后的有序列表 `[1, 2, 3, 4, 5, 6, 7, 8]`。
阅读全文