2015-07-27 6 views
0

Есть ли способ получить случайные строки из Trove (TObjectIntHashMap)? Я использую Random, чтобы проверить, как быстро Trove может искать/загружать 10 000 строк. В частности, я хотел бы передать случайное целое число и попросить Trove искать/загружать эту строку. Я пробовал использовать метод get(), но для этого требуется передать строку, а не случайный int. Я также рассматривал использование ключей() для возврата массива и чтения из этого массива, но это могло бы победить цель, поскольку я не буду читать непосредственно из Trove. Вот мой код:Получение случайных строк из Trove (TObjectIntHashMap)?

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(), в частности, для петли. Любая помощь приветствуется. Благодаря!

ответ

0

я бы:

  1. Создать массив значений, которые вы хотите вставить.
  2. Прокрутите массив и вставьте эти ключи.
  3. Выберите случайный индекс из массива и выполните поиск этого ключа.

Есть benchmarks that come bundled with Trove, которые по существу делают это уже, чтобы вы могли взглянуть на них.

Имейте в виду, что бенчмаркинг сложно понять. Я бы рекомендовал использовать фреймворк вроде JMH для вашего бенчмаркинга и не забудьте всегда тестировать в своем приложении, чтобы увидеть реальную производительность.

+0

Спасибо за быстрый ответ! Я выполнил шаги 1 и 2, но мне трудно понять, как искать ключ, используя значение. Я наткнулся на ваш другой ответ [здесь] (http://stackoverflow.com/questions/26120131/tintobjecthashmap-get-key-for-given-value). Однако при выполнении этого же точный код, я получаю другую ошибку при forEachEntry: «Метод forEachEntry (TObjectIntProcedure ) в типе TObjectIntHashMap не применяется для аргументов (новый TIntObjectProcedure () {})» Do вы знаете, почему это может быть? Еще раз спасибо, Роб! – TLe

+0

Рад помочь! Ваши «Объект» и «Int» меняются на ваш вопрос. Я не уверен, что это опечатка или настоящая проблема. [Вот код] (http://pastebin.com/pYQnbkkE), который выполняет поиск ключей. Надеюсь, поможет! –