Structure dans laquelle on peut lier à toute key plusieurs elements pas un seul

cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010 - 25 avril 2008 à 14:00
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010 - 26 avril 2008 à 01:51
Bonjour à tous,
SVP qui a une idée quelle la
structure qui rassemble à Hashtable mais dans laquelle on peut lier à
toute key plusieurs elements(pas un seul).
Bonne journée.

7 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
25 avril 2008 à 14:31
Salut:

C'est vrai que dans un Hashtable on associe à chaque vlé une seule valeur, pour pouvoir attributer plusieurs valeurs à une seule clé, on peut utiliser un vecteur pour stocker les valeurs.

Hashtable<String, Vector<Object>> entries = new Hashtable<String, Vector<Object>>();

entries.put("key1", new Vector<Object>());
entries.put("key2", new Vector<Object>(
                                Arrays.asList(new Object[] {"value1", "value2"})));
0
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
25 avril 2008 à 14:53
Merci mais j'ai pas compri cette partie:
entries.put("key2", new Vector<Object>(
                                Arrays.asList(new Object[] {"value1", "value2"})));

est ce que je peux pas declarer un vector Vector v=new Vector();ds lequel je mes mes values v.add(elt1);v.add(elt2);...  puis je fais:entries.put("keys1",v);


car franchement j'ai pas compri l'utilité deArrays.asList(new Object[] {"value1", "value2"})
que vous m'avez proposé.
une autre question:c'est quoi l'utilité de HashMap ou LinkedList ça peut pas etre une solution à résoudre mon probleme?sinon y a t-il une autre structure ds laquelle lier chaque key à +ieurs values,ça veut pas dire que votre solution ne me plait pas au contraire mais just  pour avoir amelorer mes connaissances.
Merci bien pour votre aide
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
25 avril 2008 à 15:19
Salut:

La démarche que tu as utilisé est possible.

entries.put("key2", new Vector<Object>(
                                Arrays.asList(new Object[] {"value1", "value2"})));

Il s'agit de la création et initialisation des éléments du vecteur à la volée.

Suivant les contraintes du problème (type d'accès : accès direct, accès séquentiel, taille des données, ...) une structure de données peut s'avèrer plus utile que d'autres.
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
25 avril 2008 à 15:58
Les hashtable/hashmap sont très utiles. Le temps de recherche d'un élément dans une hashtable ne dépend pas de la taille. Autrement dit, la recherche dans une hashtable de 10'000'000 ira aussi vite ou presque que dans une hashtable de 10 éléments.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
25 avril 2008 à 17:39
Salut,
Franchement je me sens bloquee ds ce genrre de Hashtable.
voici ma classe Ligne:
public

class Ligne {

public String
trans;

public String
vm;

public Hashtable<String, Vector<Object>>
typeReg;

public Vector
vReg;

public Ligne(String trans,String vm){

this.
trans= trans;

this .
vm =vm;

this.
typeReg=
new Hashtable<String, Vector<Object>>();}

En fait ds mon code j'ai une autre classe:
public
class Classe
{

public Vector
vect;

public void replaceType(String tr,String v,String type)
{
      for(int i ==0;i<vect.size;i++)
         {
            Ligne ligne=(Ligne)
vect.get(i);
            if((ligne.trans.equals(tr))&&(ligne.vm.equals(v)))
               {
                  if(ligne.typeReg.containsKey(type))
                     {
                           je dois ajouter au vecteur du Hashtable corresondant à ce key un ensemble de  String 

                     }
                }

         
         }
}
Mon probleme est que j'ai pas trouvé comment acceder au vecteur du Hashtable de ma Ligne pour ajouter un ensemble de String en fait j'ai déclaré ds la classe Ligne un attribut Vector vReg 
ds lequel je vais mettre ces String mais je sais pas si c'est just ou non.
SVP aidez moi je suis limitée  par un delais tres court et je pratique pas bien le Hashtable

 
0
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
26 avril 2008 à 00:07
Bonsoir,
J'ai trouvé la solution pour acceder au vecteur de String correspondant à chaque key du Hashtable mais j'ai un autre probleme:
les elements que j'ajoute au vecteur du Hashtable de chaque Lignne seront aussi ajoutées ds les autres ligne du Vector vect de la classe Classe je pense que le Hashtable typeReg ajoute à chaque vecteur d'un key toutes les values correspondant à ce key de toutes les autres ligne du vector vect de Classe.voici la partie du code que j'ai essayé ds le main:

//Ces 2 methodeson les ajoute a la classe Ligne//
    public String getEltVec(){
        String s="";
       
        Enumeration keys = this.typeReg.keys();
        Enumeration values = this.typeReg.elements();
        while (keys.hasMoreElements()) {
            s=","+"le mot "+keys.nextElement()+" a le value "+ values.nextElement()+"\n";
           
         }
        return s;
    }
   
    public String toString(){
        return(this.getTrans()+":"+this.getVm()+":"+this.getEltVec());       
        }
   
    // voici le main() //
    public static void main(String[] args){
        Hashtable h=new Hashtable();
        Vector v1=new Vector();
        Vector v2=new Vector();
        Vector v3=new Vector();
        Vector v=new Vector();
       
        Ligne line1=new Ligne("tr1","vm1");
        Ligne line2=new Ligne("tr2","vm2");
        Ligne line3=new Ligne("tr3","vm3");
         line1.setTrans("tr1");
         line1.setVm("vm1");
       
         line2.setTrans("tr2");
         line2.setVm("vm2");
         
         line3.setTrans("tr3");
         line3.setVm("vm3");
         
        line1.getTypeReg().put("AL", v1);       
        line2.getTypeReg().put("AL", v2);       
        line3.getTypeReg().put("AL", v3);
       
        v.add(line1);
        v.add(line2);
        v.add(line3);
        for(int i=0;i<v.size();i++){       
            Ligne    ligne=(Ligne) v.get(i);
           
            if(ligne.getTypeReg().containsKey("AL"))
            {   
                ligne.getTypeReg().remove("AL");
                Vector vAl=new Vector();
                vAl.add("reg");
                ligne.getTypeReg().put("type", vAl);
            }
           
            else if(!ligne.getTypeReg().containsKey("AL")){
               
                Vector vec=line1.getTypeReg().get("type");
               
                if(!ligne.getTypeReg().containsKey("type")){                   
                    vec.add("reg");
                    ligne.getTypeReg().put("type", vec);
                   
                }
                else if(ligne.getTypeReg().containsKey("type")){
                    vec.add("reg");
                   
                   
                }
               
            }
        }
       
        for(int i=0;i<v.size();i++){
            System.out.println(v.elementAt(i).toString()+i);
            System.out.println("size="+v.size());
        }
    } 

SVP aidez moi vraiment je suis trop pressé du temps.
0
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
26 avril 2008 à 01:51
Bonsoir,bon....
lorsque je veux ajouter un elt(String) au Vector de du Hashtable typeReg de la classe Ligne j'ai fait :



Vector v= ligne.typeReg.get(type);
//doit me retourner normalement le Vector correspondant a ce key type du Hashtable typeReg


v.addElement(reg); // pour ajouter le String reg ds le Vrector Correspondant au key type








ligne.getTypeReg().put(type, v);


//je suis pas sure de cette ligne mais meme si elle est là ou non le resultat est toujours le meme

En fait le Vector v prend toujours le dernier String ajouté alors que ds mon code je veux ajouter chaque String à l'ensemble des values qui existent deja ds le Vector.

SVP si quelcun a une idée me la propose 



 
0