Вызов метода сортировки слиянием для ArrayList
объектов данных возвращает ArrayList
, полностью состоящий из первой записи в оригинале ArrayList
(оригинал содержал 9 тыс. Отдельных записей, в то время как в «отсортированном» содержалось 9 тыс. Дубликатов).первой записи оригинала).
Я просмотрел код, но не могу понять, почему.Функция работает на ArrayList
из JsonObject
от javax, и критерием сортировки является поле в пределах указанного JsonObject
.Предполагается сравнить строки указанного поля и отсортировать их.
public void sortDataObjects(String identifier, ArrayList<JsonObject> both) {
ArrayList<JsonObject> left = new ArrayList<>();
ArrayList<JsonObject> right = new ArrayList<>();
int size = both.size();
int midpoint = size / 2;
if (size == 1) {
return;
} else {
for(int i = 0; i < midpoint; i++) {
left.add(both.get(i));
}
for (int i = midpoint; i < size; i++) {
right.add(both.get(1));
}
sortDataObjects(identifier, left);
sortDataObjects(identifier, right);
mergeSortHelper(identifier, left, right, both);
}
}
public void mergeSortHelper(String identifier, ArrayList<JsonObject> left, ArrayList<JsonObject> right, ArrayList<JsonObject> both) {
int leftIndex = 0;
int rightIndex = 0;
int bothIndex = 0;
while (leftIndex < left.size() && rightIndex < right.size()) {
if ((left.get(leftIndex).getString(identifier).compareTo(right.get(rightIndex).getString(identifier))) < 0) {
both.set(bothIndex, left.get(leftIndex));
leftIndex++;
} else {
both.set(bothIndex, right.get(rightIndex));
rightIndex++;
}
bothIndex++;
}
if (leftIndex >= left.size()) {
// The left ArrayList has been use up...
for (int i = rightIndex; i < right.size(); i++) {
both.set(bothIndex, right.get(i));
bothIndex++;
}
} else {
for (int i = leftIndex; i < left.size(); i++) {
both.set(bothIndex, left.get(i));
bothIndex++;
}
}
}