我的代码应该将两个已经排序的arraylists合并为一个已排序的arraylist,如果其中一个arraylists没有排序,那么它应该返回null。
public class MergeSorted {
public static void merge(ArrayList<Integer> a, ArrayList<Integer> b) {
for (int i = 0, j = 0; j < b.size(); i++) {
if (i == a.size() || a.get(i) > a.get(j)) {
a.add(i, b.get(j++));
}
}
}
}
这是我尝试的但是如果它们不相等则无法获得返回null的想法,我是java的新手,这是我的第二周所以请耐心等待我。我知道我应该有一个if语句来检查它们是否已经排序,还有其他但我应该在if?
中包含什么答案 0 :(得分:1)
<强>问题强>
检查两个列表是否已排序,如果是,那么它会将两个列表合并为一个排序列表,而如果列表未排序则返回null。
代码解决方案:
请尝试以下代码:
public class MergeSorted {
public static List merge(List<Integer> aList, List<Integer> bList) {
List mergeList = new ArrayList<Integer>();
//checking if list 'A' is sorted
List temp = new ArrayList(aList);
Collections.sort(temp);
boolean aSorted = temp.equals(aList);
//checking if list 'B' is sorted
temp = new ArrayList(bList);
Collections.sort(temp);
boolean bSorted = temp.equals(bList);
//if both lists are sorted then merge them
if(true == aSorted && true == bSorted) {
mergeList.addAll(aList);
mergeList.addAll(bList);
Collections.sort(mergeList);
}
return mergeList;
}
}
答案 1 :(得分:0)
通用方法是这样的:
public class MergeSort {
public static <T extends Comparable<? super T>> List<T> merge(List<T> a, List<T> b) {
if (!isSorted(a) || !isSorted(b)) {
return null;
}
final List<T> result = new ArrayList<T>(a.size() + b.size());
result.addAll(a);
result.addAll(b);
Collections.sort(result);
return result;
}
private static <T extends Comparable<? super T>> boolean isSorted(final List<T> list) {
T prevItem = null;
for (T item : list) {
if (prevItem != null && item.compareTo(prevItem) < 0) {
return false;
}
prevItem = item;
}
return true;
}
}
如果只需要它,你可以轻松地用Integer替换所有这些通用Ts ......
答案 2 :(得分:0)
ArrayList
实施包含List<Integer>
,因此排序按自然顺序进行。在等回报true
或其他false
的情况下。您可以根据需要更改它以返回任何标志。Sort and compare 2 lists if equal - List of String
例如,List<Integer> mergedList = CollectionUtils.collate(list1, list2);