2010-03-07 7 views
3

Je connais l'algorithme de hachage et hashCode() pour convertir "clé" en un entier équivalent (en utilisant une expression mathématique aléatoire) qui est ensuite compressé et stocké dans des compartiments.Comment créer votre propre HashMap en Java?

Mais quelqu'un peut-il me diriger vers une implémentation ou au moins une structure de données qui devrait être utilisée comme référence?

Je ne l'ai trouvé nulle part sur le web.

+1

Quel est le but réel? Java comporte déjà plusieurs cartes basées sur le hachage qui peuvent être réutilisées et sont de qualité suffisante dans la plupart des cas. En réécrivant, on réinvente la roue ou on essaie de résoudre un cas d'utilisation atypique. Il serait utile de savoir dans quel cas vous êtes. – Romain

+3

Coin peu connu de l'Internet: http://en.wikipedia.org/wiki/Hash_table – Pointy

+2

La source du JDK sont disponibles, btw. Voici l'implémentation 'HashMap': http://www.docjar.com/html/api/java/util/HashMap.java.html. – ewernli

Répondre

2

Créer une classe qui implémente l'interface java.util.Map et remplir les méthodes données

3

utiliser seulement Eclipse et utiliser la dernière JDK. Le code source des paquets de base de Java sont attachés avec le JDK. Ouvrez la classe HashMap et vous êtes prêt à partir. Certaines des implémentations de méthode peuvent provenir de AbstractMap, AbstractCollection, etc. Ceci est dû à la conception OO appropriée. Vous pouvez naviguer vers toutes les classes de JDK dans votre éclipse.

MISE À JOUR: Pourquoi Eclipe (ou un IDE) au lieu de simplement ouvrir le fichier zip? Un IDE peut être utilisé pour aller et venir entre les classes et, en général, est bon pour "lire" du code. Notez que toutes les implémentations de méthodes ne se trouvent pas dans un fichier comme HashMap.java et que des éditeurs de texte simples tels que notepad ++ ou textpad peuvent ne pas suffire. Un IDE complet comme eclipse/IDEA peut le rendre beaucoup plus facile. Au moins cela a fonctionné pour moi :)

+2

La source des packages Java est fournie avec le JDK. Je ne vois pas comment utiliser Eclipse pour faire quoi que ce soit. – MAK

+0

C'est probablement la meilleure façon de faire. Tirez simplement la source en ce moment et peut-être la réécrire en pseudocode pour comprendre ce qu'elle fait, puis implémentez la vôtre et faites les changements nécessaires. –

1

Si vous voulez une implémentation rapide et efficace en mémoire, vous allez vouloir utiliser un tableau pour sauvegarder votre carte. Utilisez les algorithmes de hachage que vous souhaitez indexer dans le tableau et stockez l'objet dans cet emplacement du tableau.

Il y a beaucoup de petits détails sur lesquels vous voudrez faire attention. Quand redimensionner le tableau, comment détecter et résoudre une collision de hachage, etc.

Id recommande que votre classe implémente java.util.Map car cela vous donnera une bonne idée des méthodes qui seront nécessaires et utiles.

1

créer votre propre HashMap

http://javaexplorer03.blogspot.com/2015/10/create-own-hashmap.html

1. Structure des données doivent stocker le magasin la paire clé-valeur. Créez une classe Entry pour stocker les entrées HashMap. Variable: clé, valeur et suivante La variable suivante est utilisée pour éviter la collision de hashmap en utilisant le chaînage (liste chaînée).

2. Mettez() la méthode pour mettre de nouvelles entrées dans hashmap. Identifier le godet en utilisant le hachage (hashcode% SIZE)

a. Si aucun élément n'existe dans ce compartiment: le mettre comme nouvelle entrée.

b. Si l'élément existe déjà: Si l'élément est en double, remplacez l'ancien, sinon recherchez le dernier élément de la chaîne et ajoutez une nouvelle entrée au pointeur suivant du dernier élément.

3. Méthode get(): Renvoie l'élément dans le hashmap a.Identifiez le bucket d'élément en calculant le hash (hashcode% SIZE) de la clé, et renvoyez l'élément en utilisant la méthode equals.

Questions connexes