IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

indice tableau en format String


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut indice tableau en format String
    Bonjour,
    Est-il possible de declarer un tableau dont les indices sont des chaines de caractères?

    exemple:

    tab ["nom"]= 0.45, tab["prenom"]= 0.66, ..., tab[adresse]=0.7
    est-il possible d'avoir un couple (String1, String2) comme indice ?

    exemple:

    tab[(nom, prenom)]:=0.9, ...
    Sinon que proposez vous comme solution pour remplacer l'indice de type String?

    Merci

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    En java un tableau a forcement des nombres comme indices.
    Pour faire ce que tu veux tu peux utiliser un hashmap (c'est une structure de donnée qui permet d'associer un clé (indice) à une valeur).
    Tu l'utilise comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HashMap <String,Float> map = new HashMap <String,Float> ();
    map.put("nom",0.45);
    map.put("prenom",0.66);

  3. #3
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par kamelini Voir le message
    Bonjour,
    Est-il possible de declarer un tableau dont les indices sont des chaines de caractères?

    exemple:



    est-il possible d'avoir un couple (String1, String2) comme indice ?

    exemple:



    Sinon que proposez vous comme solution pour remplacer l'indice de type String?

    Merci
    Salut à toi.

    Non les tableaux ne peuvent avoir des String en indices mais ne n'est pas très grave puisque tu peux utiliser les Maps pour faire la même chose.

    Un petit exemple avec des String en clé et des Double en valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import java.util.Map;
    import java.util.HashMap;
     
    ...
     
    Map<String, Double> map = new HashMap<String, Double>(); //déclaration de la Map
    map.put("nom", 0. 45); //ajout de la valeur 0,45 avec la clé "nom"
    int value = map.get("nom"); //récupération de la valeur
    Pour utiliser un couple de String en clé, tu peux là encore utiliser les Maps où tu utiliseras comme clé un objet personnalisé Couple qui contiendra tes 2 String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    //exemple de classe couple possible
    //equals et hashcode seront à redéfinir
    //pour pouvoir être utilisé dans les Maps
    public class Couple{
     
       private String key1;
       private String key2;
     
       public Couple(String s1, String s2) {
            key1 = s1;
            key2 = s2;
       }
     
        public String getKey1(){
            return key1;
        }
     
         public String getKey2(){
            return key2;
        }
     
        //TODO redéfinir equals
     
       //TODO redéfinir hashcode
     
    }
     
    //utilisation avec les Maps
     
    Couple couple = new Couple("nom", "prenom");
     
    Map<Couple, Double> map2 = new HashMap<Couple, Double>();
     
    map2.put(couple, 0.9);
    Si tu as des questions, notamment sur la redéfinition de equals et hashcode, n'hésite pas.

    Note : j'ai présupposé que tu utilisais la dernière version de Java (la 6), si tu utilises une version antérieure inférieure à Java 5, dis le car le code en l'état ne marchera pas.


    Edit : grilled.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut matrice dont les indices sont des couples (int, String)
    En réalité j'ai manipuler une matrice dont les indices des colonnes d=sont des couples chaînes de caractères et entiers:

    (34175, "mot1") (34175, "mot2") ... (34175, "motp")
    0............ 0.56............ 0.21..................... 0.33
    1
    2
    .
    .
    .
    n............ 0.99............ 0.11..................... 0.44

    Comment déclarer et manipuler tous ça?
    merci

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut Map<String, int>
    int ne fonctionne pas. IL n'accepte que Double.

    Map<String, int> map1=new HashMap<String, int> ();

    ???

  6. #6
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Il faut :
    1. que tu définisses ton indice couple chaine / entier dans une classe immuable
    2. que tu redéfinisses les méthodes equals et hashcode de cette classe
    3. utiliser ensuite ensuite des instances de cette classe comme clef de HashTable (par ex.).

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 200
    Par défaut Map<Couple, int>
    Pour la structuration c'est ok. il reste juste un détail:


    je veux faire un

    Map<Couple, int> map1=new HashMap<Couple, int>();

    et non pas

    Map<Couple, Double> map1=new HashMap<Couple, Double>();
    Je veux utiliser un le int comme indice du tableau. Car ce dernier n'accepte pas les Double comme indice.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JTable, créer un comparateur de Dates au format String
    Par Nyphel dans le forum Composants
    Réponses: 7
    Dernier message: 13/02/2007, 16h15
  2. [Oracle] traitement des dates au format string
    Par shaftJackson dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/01/2007, 18h25
  3. Appel de constantes en format String
    Par Shiftane dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2006, 14h50
  4. Conversion tableau de caractères / String
    Par Jayceblaster dans le forum Langage
    Réponses: 3
    Dernier message: 21/04/2006, 11h21
  5. Réponses: 11
    Dernier message: 08/10/2004, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo