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 :

problème d'un vecteur de vecteur


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 24
    Points : 13
    Points
    13
    Par défaut problème d'un vecteur de vecteur
    Bonjour,
    j'ai une file d'attente qui s'applle mysession.getSampleSet qui est constitué de
    d'échantillons de type TspSample.

    sample_info de type Vector<Object> est un vecteur constitué de 4 composantes (int, String, Object, int)

    data est un vecteur dont les composantes sont de type Vector<Object>

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    public Vector<Vector> getData(){
     
    			Vector<Vector> data = new Vector<Vector>();
    			Vector<Object> sample_info = new Vector<Object>();
    			TspSample sample = null;
     
    			for (int i=0; i<needed_ID.size();i++){
     
    			sample = mySession.getSampleSet().getSample();
     
    			sample_info.add(0,sample.getPgi());
    			sample_info.add(1,TspSSIArray[i].name);
    			sample_info.add(2,sample.getValue());
    			sample_info.add(3,sample.getTimeStamp());
     
     
    			data.addElement(sample_info);
     
    			System.out.println("Sample <"
    					+ i
    					+ "> = { provider_global_index ="
    					+ data.get(i).get(0)
    					+", name = "
    					+ data.get(i).get(1)
    					+ ", value ="
    					+ data.get(i).get(2)
    					+ ", time_stamp  ="
    					+ data.get(i).get(3)
    					+"}"						
    					);
     
    			 if (i>1){
    				 int p=i-2;
    					System.out.println("Sample <"
    							+ p
    							+ "> = { provider_global_index ="
    							+ data.get(p).get(0)
    							+", name = "
    							+ data.get(p).get(1)
    							+ ", value ="
    							+ data.get(p).get(2)
    							+ ", time_stamp  ="
    							+ data.get(p).get(3)
    							+"}"						
    							);
     
     
    					 int o=i-1;
    						System.out.println("Sample <"
    								+ o
    								+ "> = { provider_global_index ="
    								+ data.get(o).get(0)
    								+", name = "
    								+ data.get(o).get(1)
    								+ ", value ="
    								+ data.get(o).get(2)
    								+ ", time_stamp  ="
    								+ data.get(o).get(3)
    								+"}"						
    								);
     
    			 }
     
    			 System.out.println("-------------------------");
     
    		return data;
     
    		}

    mon problème c'est que data finalement est constitué de 4 vecteurs identiques qui est le dernier vecteur ajouté.


    Résultat :
    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
     
     
    Sample <0> = { provider_global_index =0, name = t, value =3021.13, time_stamp  =302113}
    -------------------------
    Sample <1> = { provider_global_index =3, name = Symbol3, value =0.7701082216960062, time_stamp  =302113}
    -------------------------
    Sample <2> = { provider_global_index =23, name = Symbol23, value =0.8586616190375727, time_stamp  =302113}
     
    Sample <0> = { provider_global_index =23, name = Symbol23, value =0.8586616190375727, time_stamp  =302113}
     
    Sample <1> = { provider_global_index =23, name = Symbol23, value =0.8586616190375727, time_stamp  =302113}
    -------------------------
    Sample <3> = { provider_global_index =845, name = Symbol845, value =-2.899999999999636, time_stamp  =302113}
     
    Sample <1> = { provider_global_index =845, name = Symbol845, value =-2.899999999999636, time_stamp  =302113}
     
    Sample <2> = { provider_global_index =845, name = Symbol845, value =-2.899999999999636, time_stamp  =302113}
    -------------------------
    merci pour l'aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Evidemment, il faut que tu crée autant de Vector sample_info que tu as de "ligne" à entrer.
    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
    public Vector<Vector> getData(){
    	
    	Vector<Vector> data = new Vector<Vector>();
    						
    	for (int i=0; i<needed_ID.size();i++){
    		Vector<Object> sample_info = new Vector<Object>();
    		sample = mySession.getSampleSet().getSample();
     
    		sample_info.add(0,sample.getPgi());
    		sample_info.add(1,TspSSIArray[i].name);
    		sample_info.add(2,sample.getValue());
    		sample_info.add(3,sample.getTimeStamp());
     
    		data.addElement(sample_info);
    	}
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    merci verbose

    ça marche

  4. #4
    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,

    Un Vector de Vector d'élément mélangé : pas top comme structure de données

    Il serait préférable de se faire une classe spécifique et d'utiliser un Vector<MaClasse>...


    Enfin, sauf pour une compatibilité pré-Java 1.2, il serait préférable d'utiliser le couple List/ArrayList, plutôt que Vector (voir Collections.synchronizedList() si on a besoin de synchronisation).

    a++

  5. #5
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Pourquoi tout le monde déconseille d'utiliser des Vectors ?
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  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

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    Salut,

    j'arrive pas a accéder à la faq ce matin.
    Mais si mes souvenirs sont bons, elle donne pas de liens vers une doc
    officielle disant cela.
    En tout cas, j'ai rien trouvé dans le javadoc à ce propos.
    Si quelqu'un à un lien vers le javadoc ou il est expliqué que la classe vector est
    déconseillée, ça m'intéresserait bien.

  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 truc_much Voir le message
    j'arrive pas a accéder à la faq ce matin.
    Cela marche très bien chez moi


    Citation Envoyé par truc_much Voir le message
    Mais si mes souvenirs sont bons, elle donne pas de liens vers une doc
    officielle disant cela.
    En tout cas, j'ai rien trouvé dans le javadoc à ce propos.
    Si quelqu'un à un lien vers le javadoc ou il est expliqué que la classe vector est
    déconseillée, ça m'intéresserait bien.
    Je ne sais pas s'il y a un document officiel qui indique cela... mais c'est ce qui est conseillé sur tous les forums Java !

    Vector est une antiquité qui date de Java 1.0, alors que l'API de Collections est apparut dans Java 1.2 :

    • Vector a été adapté pour implémenter la nouvelle interface List. Du coup son API n'est pas très clair car elle possèdent beaucoup de méthodes doublons (add()/addElement(), get()/elementAt(), remove()/removeElement()).

      Pour des fonctions similaires, Vector possède 50 méthodes là ou ArrayList se contente de 35...

    • Vector est synchronized, contrairement aux autres collections de bases. Cela vient de la logique Java 1.0 qui voulait simplifier au maximum le travail des développeurs en proposant uniquement des classes thread-safe...

      Avec l'API de Collection on préférera utiliser des collections non thread-safe pour une utilisation normale, et Collections.synchronizedList() pour une version synchronisé si besoin, voire une implémentation du package java.util.concurrent pour des besoins plus précis.

    • ArrayList est une implémentation non synchronisé de Vector, et ca c'est marqué dans la javadoc :
      This class is roughly equivalent to Vector, except that it is unsynchronized




    Si Vector n'est pas deprecated, c'est surtout car elle est encore beaucoup utilisée dans l'API Java, et que cela casserait trop la compatibilité ascendante.

    Personnellement je ne vois qu'une seule raison de l'utiliser : pour utiliser une fonction de l'API qui en a besoin...

    Maintenant tu es libre de faire ce que tu veux


    a++

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    [*]Vector est synchronized, contrairement aux autres collections de bases. Cela vient de la logique Java 1.0 qui voulait simplifier au maximum le travail des développeurs en proposant uniquement des classes thread-safe...

    Avec l'API de Collection on préférera utiliser des collections non thread-safe pour une utilisation normale, et Collections.synchronizedList() pour une version synchronisé si besoin, voire une implémentation du package java.util.concurrent pour des besoins plus précis.
    Concernant la problématique de synchronisation, une section du tuto de Sun sur les collections explique pourquoi il a été décidé de ne pas rendre les nouvelles classe du Framework Collection apparues en Java 2 thread safe :

    The fact that these implementations are unsynchronized represents a break with the past: The legacy collections Vector and Hashtable are synchronized. The present approach was taken because collections are frequently used when the synchronization is of no benefit. Such uses include single-threaded use, read-only use, and use as part of a larger data object that does its own synchronization. In general, it is good API design practice not to make users pay for a feature they don't use. Furthermore, unnecessary synchronization can result in deadlock under certain circumstances.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

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

Discussions similaires

  1. Vecteur de vecteur de vecteur ?
    Par oodini dans le forum C++
    Réponses: 22
    Dernier message: 03/10/2011, 13h12
  2. Réponses: 28
    Dernier message: 15/05/2011, 14h06
  3. Vecteurs de vecteurs de vecteurs
    Par El Charpi dans le forum C++
    Réponses: 4
    Dernier message: 11/01/2010, 21h29
  4. [Struts] Problème pour itérer sur un vecteur
    Par vallica dans le forum Struts 1
    Réponses: 5
    Dernier message: 24/04/2006, 15h45
  5. Réponses: 2
    Dernier message: 10/04/2006, 19h40

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