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 :

Existe-t-il des tableaux plus performants que les ArrayLists et les vecteurs


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut Existe-t-il des tableaux plus performants que les ArrayLists et les vecteurs
    Bonjour,
    Je suis en train de développer une application qui nécessite une mémoire tampon (matérialisée par une matrice de données obtenues par une requête sur la Base de Données). Je représente la mémoire tampon par un ArrayList de deux dimensions. Sauf que si j'atteind des grands volumes de données, l'accès à cette mémoire tampon devient un peu long.
    Est ce qu'il existe des techniques plus performantes que les ArrayList?
    Merci d'avance.

  2. #2
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bonjour,

    Je ne sais pas répondre à la question telle qu'elle est posée. En revanche, il y a peut être d'autres possibilité pour limiter le temps de chargement (qui semble être le pb)? Peut être qu'il est possible de monter ces données dans un singleton qui du coup serait chargé au moment de la première connexion (ça déplace le temps de chargement à un moment ou l'utilisateur est plus habitué à avoir à attendre)? Une autre solution pourrait être d'agir sur la récupération des données pour ne charger qu'un nombre limité d'enregistrements, quitte à récupérer la suite si nécessaire (si rien trouvé dans les 500 premiers enregistrements, tu charge les 500 suivants et ainsi de suite)?

    Je ne sais pas si ça peut t'aider? Bon courage,
    Cordialement,
    Signature à venir...
    Ancienne : Divers NTIC (PHP, Dojo, à venir...) : http://tif44.fr/blog/

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Points : 135
    Points
    135
    Par défaut
    Salut,

    les ArrayList utilisent les tableaux, tu n'auras pas plus rapides.
    Ton soucis est sur l'accès ou sur le remplissage ?
    Si c'est sur l'accès, c'est étonnant car c'est un accès direct.
    Si c'est pendant le remplissage, c'est normal car il y a le redimensionnement des tableaux. Il faut dans ce cas définir une valeur initiale lors de la création de l'ArrayList assez grande pour éviter ces redimensionnements

  4. #4
    Membre chevronné
    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 : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par Kirua12 Voir le message
    Salut,
    les ArrayList utilisent les tableaux, tu n'auras pas plus rapides.
    Dans certains cas des tableaux "éclatés" posent moins de problèmes au garbage collector et sont à la base d'ArrayList spéciaux plus performants (je ne me souviens plus de la librairie que j'ai testée... faire une recherche google du style "fast arrayList")
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Le problème ne réside pas dans le remplissage, c'est plutôt lors de l'accès à l'ArrayList pour récupérer les données.
    Moi je travaille avec des données généralement volumineuse (les tables contiennent entre 100.000 et 1 milion de lignes).

    J'ai pensé à charger les données dans une mémoire tampon pour des raisons d'optimisation:
    1) Libérer la Base de Données et aussi,
    2) Après avoir fait des tests, j'ai constaté que l'accès à la mémoire tampon est beaucoup plus rapides que l'accés direct à la BD pour en extraire des données.

    L'accès à la mémoire tampon marche très bien et ne pose aucun soucis, mais lorsque les données chargées deviennent volumineuses, j'ai l'impréssion que l'application devient plus lourde.

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu es arrivé à détecter l'origine de ces "lourdeurs" ?
    On pourrait avoir un aperçu de ton code ?

    a++

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Tu es arrivé à détecter l'origine de ces "lourdeurs" ?
    On pourrait avoir un aperçu de ton code ?

    a++
    En fait, j'ai plus de 20.000 lignes de code, donc je peux pas faire un aperçu du code.
    Moi je crois qu'il y ai des limites de tailles pour ArrayList.

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par choko83 Voir le message
    Moi je crois qu'il y ai des limites de tailles pour ArrayList.
    La seule limite concerne la taille du tableau, qui ne peut contenir au maximum "que" 2 147 483 647 éléments (soit la valeur max accepté par un int).


    Mais au delà de cette considération, l'accès à un élément quelconque se fait en temps constant, quel que soit la taille du tableau.


    Il faut monitorer ton application afin de cibler plus précisément l'origine de ces "lourdeurs".


    a++

  9. #9
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Fais-tu une recherche dans ton tableau ? C'est peut-être ton algo de recherche qui est trop complexe ? décrit-nous ton algo en quelques lignes en pseudo-code, pour que l'on comprenne au moins ce que fait ton programme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  10. #10
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par choko83 Voir le message
    Le problème ne réside pas dans le remplissage, c'est plutôt lors de l'accès à l'ArrayList pour récupérer les données.
    Quand tu parles d'accès pour récupérer des données, tu évoques le fait de récupérer la n-ième donnée de la liste (temps constant), ou bien de retrouver un objet dans la liste (temps linéaire, et donc forcément, long) ?

Discussions similaires

  1. Réponses: 31
    Dernier message: 22/04/2014, 14h55
  2. Réponses: 30
    Dernier message: 20/07/2009, 15h35
  3. Logiciel plus performant que ALG32 ?
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 07/04/2008, 23h20
  4. Réponses: 1
    Dernier message: 07/05/2007, 20h12
  5. case tableau: comment faire des hauteurs plus petites que 23px
    Par cortex024 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 28/11/2006, 17h01

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