Parcourir hashtabe en java
Résolu
alaa16
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
Marco la baraque Messages postés 996 Date d'inscription Statut Contributeur Dernière intervention -
Marco la baraque Messages postés 996 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je veux parcourir une hashtable afin d'avoir aficher tous les elements.
j'ai essayé avec l'enumeration.Mais ça ne marche pas . car la resultats afiché n'est pas les elemenet de hashtable mais l'adresse memoire de ces element !!!
voila le code :
import java.util.*;
public class Roman {
/** Creates a new instance of Roman */
private String nomR;
private int noIsbR;
public Roman(String n, int i) {
this.nomR = n;
this.noIsbR = i;
}
public void setNomTitre(String n){
this.nomR = n;
}
public void setNoIsbn(int i){
this.noIsbR = i;
}
public String getNomTitre(){
return(this.nomR);
}
public static void main(String[] args) {
Hashtable h;
h = new Hashtable();
Roman livre = new Roman("A l'ouest...", 1);
h.put(1, livre);
livre = new Roman("A l'Est...", 2);
h.put(2, livre);
Enumeration e = h.elements();
while ( e.hasMoreElements()) {
System.out.println((Roman) e.nextElement());
}
}
}
voila la resultat :
Roman@187aeca
Roman@e48e1b
Process completed.
Mercie d'avance .
je veux parcourir une hashtable afin d'avoir aficher tous les elements.
j'ai essayé avec l'enumeration.Mais ça ne marche pas . car la resultats afiché n'est pas les elemenet de hashtable mais l'adresse memoire de ces element !!!
voila le code :
import java.util.*;
public class Roman {
/** Creates a new instance of Roman */
private String nomR;
private int noIsbR;
public Roman(String n, int i) {
this.nomR = n;
this.noIsbR = i;
}
public void setNomTitre(String n){
this.nomR = n;
}
public void setNoIsbn(int i){
this.noIsbR = i;
}
public String getNomTitre(){
return(this.nomR);
}
public static void main(String[] args) {
Hashtable h;
h = new Hashtable();
Roman livre = new Roman("A l'ouest...", 1);
h.put(1, livre);
livre = new Roman("A l'Est...", 2);
h.put(2, livre);
Enumeration e = h.elements();
while ( e.hasMoreElements()) {
System.out.println((Roman) e.nextElement());
}
}
}
voila la resultat :
Roman@187aeca
Roman@e48e1b
Process completed.
Mercie d'avance .
A voir également:
- Parcourir hashmap java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Bonsoir,
Juste pour compléter la très bonne réponse de Sandul, deux petits commentaires :
- Ta méthode est la bonne, mais utilise plutôt des itérateurs plutôt que des énumérations (l'API java le conseille : NOTE: The functionality of this interface is duplicated by the Iterator interface. In addition, Iterator adds an optional remove operation, and has shorter method names. New implementations should consider using Iterator in preference to Enumeration. )
Iterator<Roman> it = h.value().iterator();
while ( it.hasNext()) {
System.out.println(it.next());
}
- Deuxième conseil inutile : Utilise plutôt une HashMap qu'une Hashtable, pour des raisons de performances. La différence est que la hashtable est synchronized, donc dans le cas où ton application n'est pas multithreadée, et que tu n'as pas d'accès concurrents sur cet objet, utilise plutôt une HashMap. Dans le cas inverse, l'utilisation de la Hashtable est justifié, donc ne tiens pas compte de ce commentaire.
Bien cordialement,
Juste pour compléter la très bonne réponse de Sandul, deux petits commentaires :
- Ta méthode est la bonne, mais utilise plutôt des itérateurs plutôt que des énumérations (l'API java le conseille : NOTE: The functionality of this interface is duplicated by the Iterator interface. In addition, Iterator adds an optional remove operation, and has shorter method names. New implementations should consider using Iterator in preference to Enumeration. )
Iterator<Roman> it = h.value().iterator();
while ( it.hasNext()) {
System.out.println(it.next());
}
- Deuxième conseil inutile : Utilise plutôt une HashMap qu'une Hashtable, pour des raisons de performances. La différence est que la hashtable est synchronized, donc dans le cas où ton application n'est pas multithreadée, et que tu n'as pas d'accès concurrents sur cet objet, utilise plutôt une HashMap. Dans le cas inverse, l'utilisation de la Hashtable est justifié, donc ne tiens pas compte de ce commentaire.
Bien cordialement,
Salut,
C'est normal d'avoir ceci à la console, car tu as
==> le nextElement te retourne un objet de type Roman. Il y a deux solutions:
1. Tu remplaces ce que tu écris à la console par
2. Ou bien tu rajoutes une méthode toString() à la classe Roman pour lui dire ce qu'elle doit écrire lorsque l'on lui demande de s'imprimer. La méthode toString pourrait retourner par exemple ce que getNomTitre() retourne à présent. Si tu rajoutes toString(), il n'est plus nécessaire de modifier le System.out.prinltn.
++
C'est normal d'avoir ceci à la console, car tu as
System.out.println((Roman) e.nextElement());
==> le nextElement te retourne un objet de type Roman. Il y a deux solutions:
1. Tu remplaces ce que tu écris à la console par
System.out.println(((Roman) e.nextElement()).getNomTitre());
2. Ou bien tu rajoutes une méthode toString() à la classe Roman pour lui dire ce qu'elle doit écrire lorsque l'on lui demande de s'imprimer. La méthode toString pourrait retourner par exemple ce que getNomTitre() retourne à présent. Si tu rajoutes toString(), il n'est plus nécessaire de modifier le System.out.prinltn.
++
réellement ce n'est pas un probleme j'ai implémenter ma classe hashtable1 a pour but de stocker des clients avec leur code mais mon probleme est dans la fonction affichage je veut qu'il affiche la cle avec les informations de l'objet client
donc mon probleme est d'afficher les cle comme par exemple cle=e de client =saif
merci
voila mon code
import java.util.*;
class Hashtable1
{
Hashtable m=new Hashtable();
public boolean remplirHash(String s,Client c)
{
if(!m.containsKey(s))
{
m.put(s,c);
return true;
}
else
{
System.out.println("cle deja utilise");
return false;
}
}
public void affichage()
{
Enumeration nb=m.elements();
System.out.println("l'ensemble des clients est ");
while(nb.hasMoreElements())
{
Object key=nb.nextElement();
Client value=(Client)m.get(key);
System.out.println("les informations sont "+key );
}
}
Client getClient(String cle)
{
if(m.containsKey(cle))
{
Client value=(Client)m.get(cle);
return value;
}
else
{
System.out.println("cle inexistante ");
return null;
}
}
}
J'ai cru voir passer ce post, et une personne t'avait aiguillée vers la surcharge de la méthode toString() si je me rappelle bien.
Voici comment c'est possible :
Comme le disait ton autre interlocuteur, l'autres solution serait de surcharger la méthode toString() de Client (et surcharger aussi la méthode hashCode()). Avec ça, plus besoin de getName().
Cordialement,
Décidément je dis pas mal de bêtises en ce moment moi...
Cordialement