在 Java 中将两个 arrayList 合并到一个新的 arrayList 中,没有重复项且按顺序排列

2022-08-31 17:24:37

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

     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));
    }

}

更新:我不再得到下面的例外。相反,程序似乎永远运行。我更改了在<中添加元素的位置,并>条件。这是我在数组列表为:IntSet 1: { 1 2 } IntSet 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)

答案 1

首先删除重复项:

arrayList1.removeAll(arrayList2);

然后合并两个数组列表:

arrayList1.addAll(arrayList2);

最后,如果您愿意,可以对数组列表进行排序:

collections.sort(arrayList1);

如果您不想对现有列表进行任何更改,请先创建其备份列表:

arrayList1Backup = new ArrayList(arrayList1);

答案 2

您可以使用合并列表,对其进行排序,最后遍历生成的 ArrayList 以删除重复项,而不是您编写的代码。因此,聚合复杂度等效于 。ArrayList.addAll()Collections.sort()O(n)+O(n*log(n))+O(n)O(n*log(n))


推荐