第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Collection.sort() 對 FastUtil BigList 進行排序

如何使用 Collection.sort() 對 FastUtil BigList 進行排序

哆啦的時光機 2022-06-23 20:34:28
如果我有 arraylist 我可以使用 Collection.sort() 這是非常有效和快速的。但是現(xiàn)在我必須使用 BigList 來保存我的對象類型的許多元素,并且我必須按值對它們進行排序,從名為 JasPlayer 的對象殺死為 int,昵稱為 String。我嘗試使用 Collection.sort() 最好的方法來做到這一點,但我不能像普通列表那樣使用它。private BigList<JasPlayer> playerRankingPlaces;public BigList<JasPlayer> getRanking() {    return this.playerRankingPlaces;}public void addRankingElement(JasPlayer element) {    this.playerRankingPlaces.add(element);}public void setRanking(BigList<JasPlayer> playerRanking) {    this.playerRankingPlaces = playerRanking;}public void sortRankingList() {    for(JasPlayer player : JasPlayerUtils.getPlayers()) {        addRankingElement(player);        long startTime = System.nanoTime();           //THERE's Problem, i can't use biglist like normal list :\        Collections.sort(playerRankingPlaces, Comparator.comparing(Ranking :: getKills).thenComparing(Ranking :: getName));        long endTime = System.nanoTime() - startTime;        MessageUtils.sendDebug("Sorting " + playerRankingPlaces.size() + "took " +  endTime / 1e9 + " seconds");    }}private static int getKills(UUID uuid) {    if(JasPlayerUtils.findByUUID(uuid).isPresent()) {        return JasPlayerUtils.findByUUID(uuid).get().getKills();    }    return 0;}private static String getName(UUID uuid) {    if(JasPlayerUtils.findByUUID(uuid).isPresent()) {        return JasPlayerUtils.findByUUID(uuid).get().getPlayer().getName();    }    return "Brak";}
查看完整描述

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]


查看完整回答
反對 回復 2022-06-23
  • 1 回答
  • 0 關注
  • 228 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號