0

Trove (TObjectIntHashMap) からランダムな行を取得する方法はありますか? Random を使用して、Trove が 10,000 行をシーク/ロードできる速さをテストしています。具体的には、ランダムな整数を渡して、Trove にその行をシーク/ロードさせたいと考えています。get() メソッドを使用してみましたが、ランダムな int ではなく文字列を渡す必要があります。また、keys() を使用して配列を返し、その配列から読み取ることも検討しましたが、Trove から直接読み取らないため、目的が無効になります。これが私のコードです:

import java.io.IOException;
import java.util.List;
import java.util.Random;

import com.comScore.TokenizerTests.Methods.TokenizerUtilities;

import gnu.trove.TObjectIntHashMap;

public class Trove {

    public static TObjectIntHashMap<String> lines = new TObjectIntHashMap<String>();

    public static void TroveMethod(List<String> fileInArrayList)
            throws IOException {
        TObjectIntHashMap<String> lines = readToTrove(fileInArrayList);
        TokenizerUtilities.writeOutTrove(lines);
    }

    public static TObjectIntHashMap<String> readToTrove(
            List<String> fileInArrayList) {

        int lineCount = 0;

        for (int i = 0; i < fileInArrayList.size(); i++) {

            lines.adjustOrPutValue(fileInArrayList.get(i), 1, 1);
            lineCount++;
        }

        TokenizerUtilities.setUrlInput(lineCount);
        return lines;
    }

    public static void loadRandomMapEntries() {
        Random rnd = new Random(lines.size());

        int loadCount = 10000;

        for (int i = 0; i < loadCount; i++) {
            lines.get(rnd);
        }

        TokenizerUtilities.setLoadCount(loadCount);
    }
}

問題のメソッドは loadRandomMapEntries()、具体的には for ループです。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

私は...するだろう:

  1. 挿入する値の配列を作成します。
  2. 配列をループして、それらのキーを挿入します。
  3. 配列からランダムなインデックスを選択し、そのキーのルックアップを行います。

基本的に既にそれを行っているTrove にバンドルされているベンチマークがあるので、それらを調べることができます。

ベンチマークを正しく行うのは難しいことに注意してください。ベンチマークにはJMHのようなフレームワークを使用し、実際のパフォーマンスを確認するためにアプリケーションで常にテストすることをお勧めします。

于 2015-07-27T15:11:02.580 に答える