java - 如何将两个数组列表按升序合并为一个

标签 java list loops arraylist

我需要将两个列表合并为一个,按升序排列,不重复,我认为我的代码非常接近,我只是错过了一些东西,我无法弄清楚。截至目前,我的代码在我的 merge 方法中无法正常工作。我认为这与我的循环有关,但我无法解决它。我当前的方法打印新列表,但它不是完美的递增顺序。如果您能帮助我弄清楚如何使此方法使用 l1 和 l2 的内容按升序打印我的合并列表,我将不胜感激。

**注意:我无法使用任何内置的数组排序方法。

谢谢!

import java.util.ArrayList;
import java.util.Random;

public class MergeLists {

    public static ArrayList<Integer> merge(ArrayList<Integer> l1, ArrayList<Integer> l2){        
    ArrayList<Integer> mergedList = new ArrayList();
    for (int j = 0; j < l1.size(); j++) {
        if (l1.get(j) < l2.get(j)) {
            mergedList.add(l1.get(j));
            mergedList.add(l2.get(j));
        } else {
            mergedList.add(l2.get(j));
            mergedList.add(l1.get(j));
        }
    }
    for (int i = l2.size() - l1.size(); i < l2.size(); i++) {
        mergedList.add(l2.get(i));
    }
    return mergedList;
}

public static ArrayList<Integer> makeRandomIncreasingList(int length) {
    ArrayList<Integer> randomList = new ArrayList();
    Random rand = new Random();
    int inList = rand.nextInt(9) + 1;
    int inList2 = rand.nextInt(9) + 1;
    for (int i = 0; i < length; i++) {
        randomList.add(inList);
        inList = inList + inList2;
    }
    return randomList;
}

public static void doMergeTest() {
    ArrayList<Integer> list1 = makeRandomIncreasingList(10);
    ArrayList<Integer> list2 = makeRandomIncreasingList(20);
    ArrayList<Integer> mergedList = merge(list1, list2);
    System.out.println("List 1:" + list1);
    System.out.println("List 2:" + list2);
    System.out.println("Merged list:" + mergedList);
}

public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
        System.out.println("Performing merge test #" + (i + 1) + ":");
        doMergeTest();
    }
}
}

最佳答案

删除重复项

arrayList1.remove(arrayList2);

然后合并两个arrayList:

arrayList1.addAll(arrayList2);

最后对最后一个进行排序

collections.sort(arrayList1);

另一种方法是使用 SET:Set 不允许重复
(HashSet 更快,具体取决于 List 实现类)

Set setmerge = new HashSet(list1);

setmerge.addAll(list2);

list1.clear();

list1.addAll(setmerge);

关于java - 如何将两个数组列表按升序合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21539586/

相关文章:

python - 如何在 Python 中划分 2 个列表时处理列表推导中被零除的异常

python - 将 nltk.FreqDist 单词分成两个列表?

c# - 输入字符串的格式不正确 C#

c++ - 有没有办法简化这个 C++ 整数循环数组?

SQL删除循环

java:如何从整体上检查 ArrayList 的类型

java - 用Java写Excel文件

java - 比较 Java 中 vector 和数组之间的功能

java - 在 ArrayList 之间交换元素

python - 在python列表中切片一个字符串