Java gamme de tables de hachage
J'ai besoin d'un tableau de tables de hachage dans un programme qui stocke tous les mots à partir d'un ensemble de documents.
Indice 1 du tableau contient une table de hachage de la Chaîne -> Double qui stocke un mot, et son nombre de document 1 (tableau indice 100 = document numéro 100 de la table de hachage (hashtable).
Je n'ai pas besoin d'aide en utilisant cette structure de données, tout en le créant.
Je déclare la table de hachage Tableau comme suit:
Hashtable<String,Double>[] h1 = new Hashtable<String,Double>[];
... mais cela ne veut pas compiler.
(NOTE: Le Double est nécessaire plutôt qu'à un nombre Entier dans la déclaration ci-dessus pour une utilisation ultérieure.)
QUESTION:
Comment créer un tableau de tables de hachage qui stocke la Chaîne->Double ???
Des suggestions apprécié les gars....
Vous devez vous connecter pour publier un commentaire.
C'est parce que le tableau n'a pas de nom,
new
attend un certain nombre d'éléments et que vous ne pouvez pas allouer un tableau de les génériques. Préférez unList
à la place:suffit d'utiliser
pourquoi n'utilisez-vous pas un
Map<Integer, Map<String, Double> >
?de cette façon, vous n'avez pas perdre de l'espace pour les non-documents existants, et encore obtenir O(1) la récupération.
vous pouvez créer comme ceci.
Deux choses: vous ne pouvez pas déclarer un tableau avec le type paramétré comme ça; vous impliquer déclarer un
new Hashtable[]
. Et vous avez besoin de donner la matrice a de la longueur.Mélange des tableaux et des Collections, bien que possible, sème la confusion et conduire à des problèmes dans mon expérience; aussi HashMap est généralement préférée à la table de hachage. Donc j'aurais tendance à préférer un
List<Map<String, Double>>
pour cette application.Les raisons pourquoi c'est une erreur sont couverts dans Angelika de Langer Génériques FAQ: Puis-je créer un tableau dont le type de composant est un béton de type paramétré?
Les tableaux et les génériques peuvent avoir bizarre interactions (en grande partie en raison de la mise en œuvre des compromis pour assurer la compatibilité). Vous pouvez être mieux (comme larsmans suggéré) à la recherche à un type de collection comme un Liste de Cartes.
Un tableau qui semble être un choix inhabituel de la structure ici. Peut-être vous devriez envisager de stocker vos tables de hachage dans une Liste. Il va de redimensionner dynamiquement pour vous si vous ne savez pas combien de document, vous aurez à l'avance. Si vous utilisez un
ArrayList
, vous aurez toujours de la constante de temps de lit de hasard indices (comme un tableau.) Je pense que c'est beaucoup plus simple que d'utiliser un tableau, et vous obtenez toujours le générique vérification de type. Si vous choisissez une Liste, la syntaxe devient:Ou choisir une
LinkedList
selon le type de schéma de lecture/écriture que vous voulez.Fixe la taille du tableau: