合并排序会返回由第一个条目的多个副本组成的ArrayList,而不是已排序的ArrayList

时间:2019-05-22 00:12:36

标签: java arraylist mergesort

ArrayList数据对象上调用我的Merge排序方法将返回一个ArrayList,该{完全由原始ArrayList中的第一个条目组成(原始有9k个单独的条目,而'排序后的”与原始条目的第一个条目有9k个副本”。

我已经看过代码,但似乎无法找出原因。该函数在javax的ArrayList的{​​{1}}上进行操作,并且排序标准是所述JsonObject中的一个字段。应该比较所述字段的字符串并对其进行排序。

JsonObject

2 个答案:

答案 0 :(得分:2)

您的错误在这里:

for (int i = midpoint; i < size; i++){
    right.add(both.get(1));
}

这不会将原始列表的后半部分放到right中。

答案 1 :(得分:1)

right数组未正确初始化,赋值right.add(both.get(1));不正确:有一种打字错误很容易引起注意,1代表i

建议也正确处理空数组。

这是更正的版本:

public void sortDataObjects(String identifier, ArrayList<JsonObject> both) {
    int size = both.size();

    if (size > 1) {
        ArrayList<JsonObject> left = new ArrayList<JsonObject>();
        ArrayList<JsonObject> right = new ArrayList<JsonObject>();
        int midpoint = size / 2;

        for(int i = 0; i < midpoint; i++) {
            left.add(both.get(i));
        }
        for (int i = midpoint; i < size; i++) {
            right.add(both.get(i));
        }
        sortDataObjects(identifier, left);
        sortDataObjects(identifier, right);
        mergeSortHelper(identifier, left, right, both);
    }
}