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

Langage Java Discussion :

[Vector] Cherche vecteurs optimisés.


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Par défaut [Vector] Cherche vecteurs optimisés.
    Bonjour.
    Pour un de mes projets j'ai besoin de stocker des objets dans une structure de taille variable en effectuant plusieurs centaines d'ajouts et de suppression par secondes.
    Après avoir testé différentes classes (LinkedList, Vector, Hashtable), j'ai retenu la classe Vector pour son accès rapide à un élément donné par son index.
    LE problème c'est que la méthode "remove" de la classe Vector est très très lente du fait d'une recopie partielle du tableau interne de la collection.
    Je cherche donc une implémentation d'une collection de type Vector ayant une méthode "remove" plus performante.
    Auriez vous des idées ?
    Merci d'avance.

  2. #2
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Vector est une classe depreciée en quelque sorte : il vaut mieux que tu utilise ArrayList qui est supportée. Il est important de determiner quelles sont les opérations critiques que tu as à réaliser et pour faire le bon choix il est utile d'avoir des notions de complexité. Je vois que tu as testé linkedlist et hastable, ceux sont des collections dont les utilisations sont complètement différentes du fait de leur implementation

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Par défaut
    Citation Envoyé par leyee Voir le message
    Vector est une classe depreciée en quelque sorte : il vaut mieux que tu utilise ArrayList qui est supportée. Il est important de determiner quelles sont les opérations critiques que tu as à réaliser et pour faire le bon choix il est utile d'avoir des notions de complexité. Je vois que tu as testé linkedlist et hastable, ceux sont des collections dont les utilisations sont complètement différentes du fait de leur implementation
    ArrayList ou Vector ça ne change pas grand chose pour mon problème.
    C'est l'opération de recopie du tableau interne lors d'un remove qui plombe les performances.


    Voilà un code de test :
    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
     
    for (int k=0;k<10;k++) {
    			long t1 = System.currentTimeMillis();
    			Vector ll = new Vector();
    			for (int i=0;i<10000;i++)
    				ll.add(new Integer(i));
     
     
    			for (int i=0;i<10000;i++) {
    				ll.get(i);
    			}
     
    			for (int i=0;i<10000;i++) {
    				ll.remove(5000);
    				ll.add(new Integer(i));
    			}
     
    			for (int i=0;i<10000;i++) {
    				ll.get(i);
    			}
     
    			long t2 = System.currentTimeMillis();
    			System.out.println(t2-t1);
    			}
    Pour avoir des performances acceptables, il faudrait que je divise la durée de ce test par dix environ.
    Si on commente la ligne "ll.remove(5000);", le gain de performance est de l'ordre de 60%.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utilises la TreeList de l'API commons.collection de Jakarta

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Par défaut
    Citation Envoyé par sinok Voir le message
    Utilises la TreeList de l'API commons.collection de Jakarta
    Je viens de faire des tests.
    C'est environ 30% plus rapide qu'avec les vecteurs. Pas encore suffisant mais c'est déjà pas mal.
    Merci pour l'info.

  6. #6
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Si c'est important Vector ou ArrayList, Vector te coute le temps de la synchronisation en plus.

    Fred

  7. #7
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Citation Envoyé par leyee Voir le message
    Vector est une classe depreciée en quelque sorte : il vaut mieux que tu utilise ArrayList qui est supportée.
    Du tout du tout !!!!!!!
    ArrayList n'est pas threadsafe, et les Vector sont maintenant AUSSI EFFICACE à quelques brouettes près que ArrayList.
    Merci qui ? Merci Sun !

  8. #8
    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 nicorama Voir le message
    Du tout du tout !!!!!!!
    ArrayList n'est pas threadsafe, et les Vector sont maintenant AUSSI EFFICACE à quelques brouettes près que ArrayList.
    Merci qui ? Merci Sun !
    Oui mais Vector est une vieillerie héritée de Java 1.0 (même si cette classe a évoluée).

    Elle contient des doublons de méthodes (comme par exemple add et addElement qui font la même chose).

    Elle contient des erreurs (méthode firstElement qui sert à rien).

    Son nom ne renseigne pas de l'interface qu'elle implémente (comme ArrayList => implémente List) ce qui est en même temps normal étant donné qu'elle est plus ancienne que le framework de Collection de Java 2.

    Et puis le fait qu'elle soit threadsafe est inutile puisque désormais il suffit d'appeler l'une des méthodes synchronizedXXX de la classe Collections pour obtenir la version "threadsafe" d'une Collection particulière.

    Donc il n'y a aucune raison d'utiliser Vector.

Discussions similaires

  1. remplissage d'un vecteur de type vector
    Par fatjoe dans le forum C++
    Réponses: 18
    Dernier message: 02/05/2008, 22h08
  2. std::vector, taille du vecteur-> quel fonction
    Par toutounesan dans le forum C++
    Réponses: 3
    Dernier message: 11/09/2007, 15h43
  3. [Vector] Adresse de l'objet d'un vecteur
    Par Polyfructol dans le forum C++
    Réponses: 9
    Dernier message: 03/09/2007, 19h46
  4. [STL Vector]Creation d'un vecteur 2D
    Par franc82 dans le forum SL & STL
    Réponses: 4
    Dernier message: 18/04/2007, 11h59
  5. Réponses: 24
    Dernier message: 15/02/2007, 23h41

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