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

Java Discussion :

Question performances : comparaisons listes Vs tableaux


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut Question performances : comparaisons listes Vs tableaux
    Bonjour à tous,

    Je souhaiterai savoir laquelle des deux méthodes suivantes est la plus optimisée selon vous. Bien sûr je pourrai faire des tests de performances, mais ces derniers sont prévus pour le mois prochain.

    Voici donc le problème :
    Je dispose des éléments suivants :

    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
     
    public class Machin {
        private String nom;
        private String prenom;
        private int age;
        private List<Machin> enfants;
     
        // getters & setters
    }
     
    String[] tab  = {"blah", "blih", "bloh"};
    String[] tab2 = {"blah", "blih", "bloh", "bluh"};
     
    List<Machin> list;  // list.size() = 3
    List<Machin> list2; // list.size() = 4
    Pour comparer les tableaux, facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    boolean diff = false;
    for (int i=0; i<tab.length; i++) {
        diff = !tab[i].equals(tab2[i]);
    }
    Pour les listes il faudrait que j'en construise une 3ième
    puis un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    diff = !list.containsAll(listTmp);
    Je pense que l'itération du tableau sera plus rapide SAUF si il y a possibilité de faire le containsAll sur une sous-liste de list2.

    [edit]
    Pour optimiser la comparaison des tableaux, éventuellement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boolean diff = false;
    for (int i=0; i<tab.length && !(diff = tab[i].equals(tab1[i])); i++);

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    la liste est-elle RandomAccess ?
    (de toutes façon pour des petites tailles ça n'a pas d'importance)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Qu'est ce que ça veut dire "RandomAccess" ?

    En réalité, mon tableau de Strings est obtenu à l'aide d'un <html:select> de struts.
    Le traitement s'effectue donc dans mon Action. Le tableau à ce moment est de taille n+1 (le tableau n étant stocké à l'itération d'avant).

    Je viens de me rendre compte d'un autre problème...

    Explication :

    J'ai un formulaire de création de groupes.
    Chaque groupe peut contenir un nombre x de sous groupes. Ce nombre n'est pas défini à l'avance, c'est à la discrétion de l'utilisateur.

    Ces sous groupes sont eux-mêmes constitués d'un nom et d'une Liste.

    J'ai donc une Action "intermédiaire" qui me permet d'ajouter sur demande un sous-groupe dans le formulaire.

    Actuellement je reconstruit à chaque appel de mon Action le Groupe => itération sur les sous-groupe puis sur la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (SousGroupeDto ssrd : creerGroupeForm.getGroupeDto().getSousGroupeDtoListe()) {
        List < ServiceDto > localServiceDtoList = new ArrayList < ServiceDto >();
        for (String codeArianeStr : ssrd.getCodeServiceSelectionStrTab()) {
            ServiceDto localServiceDto = new ServiceDto();
            localServiceDto.setCodeServiceStr(codeArianeStr);  
            localServiceDto.setNomServiceStr(creerGroupeForm.getServiceDtoHashMap().get(codeArianeStr).getNomServiceStr());
            localServiceDtoList.add(localServiceDto);
        }
        ssrd.setReferentielDtoListe(localServiceDtoList);
    }
    À l'origine je souhaitais ne reconstruire la liste QUE si la Liste d'un sous-groupe est modifiée, mais j'avais oublié le nom...

    Quel traitement serait le plus efficace ?

Discussions similaires

  1. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  2. [Tableaux] Comparaison de 2 tableaux
    Par vodasan dans le forum Langage
    Réponses: 9
    Dernier message: 10/01/2008, 08h51
  3. Comparaison de deux tableaux
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 27/06/2006, 19h40
  4. Question performance sur requetes sql
    Par shinrei dans le forum ASP
    Réponses: 7
    Dernier message: 19/05/2006, 13h28
  5. [RegEx] Question performance avec preg_replace_callback()
    Par Thierry8 dans le forum Langage
    Réponses: 7
    Dernier message: 28/04/2006, 19h09

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