我试图“合并”两个arrayList,产生一个新的arrayList,其中包含两个组合arrayLists中的所有数字,但没有任何重复的元素,它们应该是有序的。我想出了下面的这段代码。我遍历了它,这对我来说很有意义,但是我不确定是否可以使用比较arrayLists中的get(i)。我将array1中的所有元素添加到plusArray中。然后,我将通过plusArray并将其与array2进行比较,以查看plusArray内部是否存在任何array2的元素。如果他们这样做,我什么也不做,但是如果他们不这样做,我将尝试将其添加到正确的位置。也许我嵌套的for循环使用不正确?注意:ArrayList由用户按升序进行预排序。

     ArrayList<Integer> plusArray = new ArrayList<Integer>();
for(int i = 0; i < array1.size(); i++){
    plusArray.add(array1.get(i));
}

for(int i = 0; i < plusArray.size(); i++){
    for(int j = 0; j < array2.size(); j++){

    if(array2.get(j) < plusArray.get(i)){
        plusArray.add(i,array2.get(j));
    }
    else if(plusArray.get(i).equals(array2.get(j))){
        ;
    }
    else if(array2.get(j) > plusArray.get(i)){
        plusArray.add(i, array2.get(j));
    }

}

更新:我不再得到下面的异常。相反,该程序似乎永远运行。我更改了在条件中添加元素的位置。
///
这是我的数组列表为以下情况的异常:
诠释集1:{1 2}
诠释集2:{1 3 4}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at IntSet.plus(IntSet.java:92)
at IntSetDriver.main(IntSetDriver.java:61)

最佳答案

除了编写的代码外,还可以使用ArrayList.addAll()合并列表,使用Collections.sort()对其进行排序,最后遍历结果ArrayList以删除重复项。因此,总的复杂度为O(n)+O(n*log(n))+O(n),它等于O(n*log(n))

10-08 09:22