0

私は、何億ものアイテム(外部スクリプトから呼び出される)で毎秒複数回開始および停止されるJavaアプリケーションを持っています。

Input: String key
Output: int value

このアプリケーションの目的は、決して変化しないMap(~30k キー) で特定のキーを探し、値を返すことです。非常に簡単。

質問: 1 秒間に複数回使用すると、より効率的なのはどれですか?

  1. ハードコードされた辞書Map
  2. を使用して外部ファイルを読み取るBufferedReader
  3. ...あなたの他のアイデアで私を驚かせてください

ハードコーディングがであることは知っていますが、効率的にするために悪である必要がある場合もあります:-)

4

3 に答える 3

1

最も速いのは、メモリ内のハード コードされたマップです。ua に巨大なファイルがある場合は、メモリ マップ ファイルを使用できます。

MappedByteBuffer in = new FileInputStream("map.txt").getChannel().map(
FileChannel.MapMode.READ_ONLY, 0, LENGTH);
StringBuilder bs = new StringBuilder();
//read 1/4 of the file   
while (i < LENGTH/4)
      bs.append((char)in.get(i++));

ただし、このアプローチには少し問題があります。実際には、ファイルを改行で分割する必要があります。つまり、100 行目まで読み取り、バッファーを消去してさらに読み取ります。

于 2013-05-02T21:01:19.070 に答える