java 将两个排序的数组列表合并为一个排序的数组列表

gkn4icbw  于 2023-06-04  发布在  Java
关注(0)|答案(3)|浏览(515)

我的代码应该将两个已经排序的数组列表合并成一个排序的数组列表,如果使用的数组列表之一没有排序,那么它应该返回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语句来检查它们是否排序,还有一个else,但是我应该在if里面包含什么呢?

sxissh06

sxissh061#

问题

检查两个列表是否排序,如果是,则将两个列表合并为一个排序列表,而如果列表未排序,则返回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; 
    }
  }
lsmepo6l

lsmepo6l2#

  • 请参考此链接以比较List实现是否相等。请注意,您的ArrayList实现包含List<Integer>,因此排序是按自然顺序进行的。如果相等返回truefalse。您可以根据需要更改它以返回任何标志。

Sort and compare 2 lists if equal - List of String

  • 有一些有用的Apache Common库类,可以帮助你合并排序的数组列表:这将给予你你正在寻找的东西。org.apache.commons.collections4包。Apache公共库版本4 - collate()

例如,List<Integer> mergedList = CollectionUtils.collate(list1, list2);

gxwragnw

gxwragnw3#

一般的方法是这样的:

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替换所有这些通用的T,如果你只需要它的话。

相关问题