Я почти уверен, что вы страдаете от проблемы XY .BigList Fastutil сложнее в использовании, чем обычные списки, и нет причин использовать его, если количество элементов не может превышать Integer.MAX_VALUE.
Если вам это действительно нужно (скажем, у вас действительно 3000 миллионов элементов и вам нужно сохранить их в памяти в виде списка), то, как я обнаружил сортировку BigList, использует статические методы сортировки в классе BigArrays, слияние и быстрая сортировка .Они принимают в качестве аргументов:
- Начальный (включающий) и конечный (исключающий) индексы для сортировки, т. Е. 0 и размер списка
- a LongComparator, который является объектом, который задандва длинных индекса сравнивают элементы с этими индексами
- a BigSwapper, который является объектом, которому присваиваются два длинных индекса, которые заменяют элементы с этими индексами.
Пример:
import it.unimi.dsi.fastutil.BigArrays;
import it.unimi.dsi.fastutil.BigList;
import it.unimi.dsi.fastutil.BigSwapper;
import it.unimi.dsi.fastutil.longs.LongComparator;
import it.unimi.dsi.fastutil.objects.ObjectBigArrayBigList;
public class App
{
public static void main( String[] args )
{
BigList<String> bigList = new ObjectBigArrayBigList<String>();
bigList.add("Z");
bigList.add("X");
bigList.add("Y");
bigList.add("A");
bigList.add("C");
bigList.add("B");
System.out.println("Biglist before: " + bigList.toString());
LongComparator cmp = (i,j) -> bigList.get(i).compareTo(bigList.get(j));
BigSwapper swapper = (i,j) -> {
String tmp = bigList.get(i);
bigList.set(i, bigList.get(j));
bigList.set(j, tmp);
};
BigArrays.mergeSort(0, bigList.size64(), cmp, swapper);
System.out.println("Biglist after : " + bigList.toString());
}
}
Выход:
Biglist before: [Z, X, Y, A, C, B]
Biglist after : [A, B, C, X, Y, Z]