1 回答

TA貢獻1804條經驗 獲得超8個贊
我很確定您正遭受XY 問題的困擾。Fastutil 的 BigList 比普通列表更難使用,如果元素數(shù)量不能超過 Integer.MAX_VALUE,則沒有理由使用它。
如果你真的需要它(假設你真的有 30 億個元素并且需要將它們作為列表存儲在內存中),我發(fā)現(xiàn)對 BigList 進行排序的方式是使用 BigArrays 類中的靜態(tài)排序方法mergesort 和 quicksort。他們將其作為論據(jù):
要排序的開始(包括)和結束(不包括)索引,即 0 和列表的大小
一個 LongComparator ,它是一個給定兩個長索引的對象,比較這些索引處的元素
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]
添加回答
舉報