2015-07-27 2 views
0

Existe-t-il un moyen d'obtenir des lignes aléatoires à partir d'un trove (TObjectIntHashMap)? J'utilise Random pour tester à quelle vitesse un Trove peut chercher/charger 10 000 lignes. Plus précisément, j'aimerais passer un nombre entier aléatoire et demander au groupe de rechercher/charger cette ligne. J'ai essayé d'utiliser la méthode get(), mais il faut que je passe une chaîne plutôt qu'un int aléatoire. J'ai également envisagé d'utiliser keys() pour retourner un tableau et lire à partir de ce tableau, mais cela irait à l'encontre du but car je ne lirais pas directement de Trove. Voici mon code:Obtention de lignes aléatoires à partir de 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); 
    } 
} 

La méthode en question est loadRandomMapEntries(), en particulier la boucle for. Toute aide est appréciée. Merci!

Répondre

0

Je voudrais:

  1. Créer un tableau des valeurs que vous souhaitez insérer.
  2. Parcourez la baie et insérez ces clés.
  3. Choisissez un index aléatoire dans le tableau et effectuez la recherche pour cette clé.

Il ya benchmarks that come bundled with Trove qui font essentiellement cela déjà, alors vous pouvez jeter un oeil à ceux-ci. Gardez à l'esprit que l'analyse comparative est difficile à réaliser. Je vous recommande d'utiliser un framework comme JMH pour votre analyse comparative et assurez-vous de toujours tester dans votre application pour voir les performances du monde réel.

+0

Merci pour la réponse rapide! J'ai fait les étapes 1 et 2, mais je n'arrive pas à trouver comment rechercher la clé en utilisant la valeur. Je suis tombé sur votre autre réponse [ici] (http://stackoverflow.com/questions/26120131/tintobjecthashmap-get-key-for-given-value). Cependant, lorsque vous faites ce même code exact, je reçois une autre erreur sous forEachEntry: "La méthode forEachEntry (TObjectIntProcedure ) dans le type TObjectIntHashMap n'est pas applicable pour les arguments (nouveau TIntObjectProcedure () {})" Do vous savez pourquoi cela pourrait être? Merci encore, Rob! – TLe

+0

Content de vous aider! Votre "Objet" et "Int" sont inversés dans votre question. Je ne suis pas sûr si c'est une faute de frappe ou le vrai problème. [Voici le code] (http://pastebin.com/pYQnbkkE) qui effectue les recherches de clé. J'espère que cela aide! –