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 :

Déclarer et initialiser un tableau en même temps


Sujet :

Collection et Stream Java

  1. #1
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut Déclarer et initialiser un tableau en même temps
    Bonjour,

    Je débute en Java et je viens du C/C++, donc excusez d'avance la candeur de ma question.

    Je voudrait initialiser un tableau en Java avec des données constantes que je connais à la compilation. Le tableau fera quelque chose comme 21000 lignes.

    En C, cela donne un truc comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct MaStruct_t
    {
       const char * Nom;
       const int Value;
    } MaStruct_t;
     
    MaStruct_t MonTableau[] =
    { { "Nom1", 12 },
      { "Nom2", 14 },
      { "Nom3", 7 },
    ... 21 000 lignes différentes
    };
    Comment est-ce que l'on peut faire la même chose ou un équivalent en Java ?

    Merci d'avance
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[] tab = {5, 4, 3, 2, 1};
    Pour des objets, cela te donnerai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integer[] integers = {new Integer(5), new Integer(4)};
    Bien sûr, l'exemple est trivial

    Généralement, on préfère utiliser les List et leurs dérivées.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonjour,

    Si je comprend bien ton besoin (mes notions de C remonte ^^) c'est un String en clé qui donne une valeur en int. Si c'est bien cela tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HashMap<String,Integer> maHashMap = new HashMap<String,Integer> ();
     
    maHashMap.put("fabien",24);
    maHashMap.put("elea",25);
    Pour jouer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // boucle for
    for(Map.Entry<String,HashMap<String,Integer> e : MaHashMap.entrySet()){
    e.key() et e.getvalue()
    }
     
    // acces direct
    System.out.println(maHashMap.get("fabien"));
    résultat : 24
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Bien sûr, l'exemple est trivial
    En ce qui concerne l'exemple trivial, je l'avais déjà trouvé :-) C'est un bête tableau d'entiers mais ce n'est pas tout à fait ce que je veux. Je voudrais un tableau de structures (ou de classes).

    Citation Envoyé par XxArchangexX Voir le message
    Si je comprend bien ton besoin (mes notions de C remonte ^^) c'est un String en clé qui donne une valeur en int.
    Oui, on peut imaginer un truc genre "Nom de Ville" et "Code Postal" par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HashMap<String,Integer> maHashMap = new HashMap<String,Integer> ();
     
    maHashMap.put("fabien",24);
    maHashMap.put("elea",25);
    Oui mais cela, c'est du code, le tableau est initialisé par codage. J'aurais voulu savoir s'il est possible de l'initialiser à la compilation. Vu que c'est un tableau constant, il ne sera JAMAIS modifié, donc autant faire le travail une seule fois et par le compilateur.

    Dans l'exemple (en C) que j'ai donné, le tableau est créé par le compilateur.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Bonjour,

    Je ne vois ou tu bloques, tout a été dit.

    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
    public class MaStruct {
     
      private String nom;
      private int value;
     
      public Mastruct(String unNom, int uneValeur) {
        nom = unNom;
        value = uneValeur;
      }
    }
     
    public MaStruct[] monTableau = {
      new MaStruct("Nom1", 12),
      new MaStruct("Nom2", 14),
    ...
    };
    Juste une précision, Java est interprété, donc ce n'est pas le compilo qui va faire le boulot, suivant la déclaration de la classe contenant ton tableau ce sera fait au chargement de la classe la première fois (cas d'une déclaration statique) ou à la création d'une instance de la classe.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par bulbo Voir le message
    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
    public class MaStruct {
     
      private String nom;
      private int value;
     
      public Mastruct(String unNom, int uneValeur) {
        nom = unNom;
        value = uneValeur;
      }
    }
     
    public MaStruct[] monTableau = {
      new MaStruct("Nom1", 12),
      new MaStruct("Nom2", 14),
    ...
    };
    Maintenant, tout est dit, je n'avais pas vu qu'il fallait faire des new à chaque ligne. Peut être que cet exemple mériterait une entrée dans la FAQ ?


    Citation Envoyé par bulbo Voir le message
    Juste une précision, Java est interprété
    C'est vrai
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par bulbo Voir le message
    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
    public class MaStruct {
     
      private String nom;
      private int value;
     
      public Mastruct(String unNom, int uneValeur) {
        nom = unNom;
        value = uneValeur;
      }
    }
     
    public MaStruct[] monTableau = {
      new MaStruct("Nom1", 12),
      new MaStruct("Nom2", 14),
    ...
    };
    Je viens de voir qu'il y a une limitation à cette méthode et je ne sais pas s'il s'agit d'une limite Java ou Eclipse.

    La taille de l'initialisation (le bloc compris entre "= {" et "};" ne doit pas être plus grande que 65535 octets. Dans mon cas (21 000 lignes), j'explose cette limite.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Quand on a des données aussi gigantesques, on ne les met pas dans le code source, c'est ingérable -_-°.

    On les met dans un fichier de données à part, qu'on chargera au démarrage.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Quand on a des données aussi gigantesques, on ne les met pas dans le code source, c'est ingérable
    C'est une des limitations de Java que je suis entrain de découvrir. En C/C++, cela ne pose pas de problèmes particuliers, on peut les intégrer directement dans le code.

    Citation Envoyé par thelvin Voir le message
    On les met dans un fichier de données à part, qu'on chargera au démarrage.
    Pour la suite, cf ici : Données statiques d'un programme gigantesques
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    C'est une des limitations de Java que je suis entrain de découvrir. En C/C++, cela ne pose pas de problèmes particuliers, on peut les intégrer directement dans le code.
    La syntaxe de C fait que ce n'est pas encore trop farfelu. Mais avec la syntaxe Java, même s'il n'y avait pas de limitation, ce serait ingérable quand même.

    Java n'est pas un format de description de données, c'est tout. C'est un langage de programmation. Certains langages de programmation font les deux sans trop de mal, et il est vrai que C s'en sort honorablement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [FAQ] Comment déclarer et initialiser un tableau ?
    Par Watilin dans le forum Contributions JavaScript / AJAX
    Réponses: 20
    Dernier message: 06/03/2016, 21h45
  2. Réponses: 2
    Dernier message: 26/07/2011, 17h13
  3. [Free Pascal] Déclarer et remplir un tableau en même temps
    Par WayneCampbell dans le forum Lazarus
    Réponses: 2
    Dernier message: 12/03/2011, 18h01
  4. [RCP] Initialiser une action en même temps que sa vue
    Par sly078 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/05/2010, 09h10
  5. Réponses: 15
    Dernier message: 21/03/2006, 14h10

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