[java] convertir un vecteur en un tableau a 2 dim

convertir un vecteur en un tableau a 2 dim [java] - Programmation

Marsh Posté le 03-01-2002 à 12:09:11    

bonjour tt le monde
j ai besoin de votre aide et oui c encore moi avec mes probleme de vecteurs  ...
voila le probleme
j ai un vecteur qui contien des vecteurs
en fait chaque éléments du premier vecteur est lui meme un vecteur
je voudrait copié leur contenu ds un tableau a 2 dim
 
merci de votre aide
jerry

 

[edtdd]--Message édité par veryfree--[/edtdd]

Reply

Marsh Posté le 03-01-2002 à 12:09:11   

Reply

Marsh Posté le 03-01-2002 à 12:47:42    

Bin tu fais un truc a la main, barbare :
 

Code :
  1. TQ pas a la fin du vecteur principal
  2.     on se positionne sur le debut du vecteur secondaire
  3.     TQ pas la fin du vecteur secondaire
  4.         ajouter l'element dans ton tableau
  5.         passer a l'element suivant du vecteur secondaire
  6.     FTQ
  7.     passer à l'element suivant du vecteur principal
  8. FTQ


 
Voila c l'algo général, ya pas les indices pour ton tableau a 2 dim, mais 2 entiers (aller au hasard i et j) et voila ...

Reply

Marsh Posté le 03-01-2002 à 13:22:57    

Euh, c'est bien beau tout ca mais un vecteur par déf. n'a pas de taille fixe. Si tu as un truc du genre
 
Vecteur  1 contient 50 vecteurs
Vecteur  2 contient 1 vecteurs
Vecteurs 3 contient 150 vecteurs
 
Et puis dans les vecteurs de vecteurs t'as des éléments allant de 3000 éléments à 1 éléments
 
tu fais un tableau 150*3000 ???
Où est l'intérêt ?
 
Si c'est fixe alors pq avoir fait des vecteurs ?


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 03-01-2002 à 14:16:03    

darklord22 a écrit a écrit :

Euh, c'est bien beau tout ca mais un vecteur par déf. n'a pas de taille fixe. Si tu as un truc du genre
 
Vecteur  1 contient 50 vecteurs
Vecteur  2 contient 1 vecteurs
Vecteurs 3 contient 150 vecteurs
 
Et puis dans les vecteurs de vecteurs t'as des éléments allant de 3000 éléments à 1 éléments
 
tu fais un tableau 150*3000 ???
Où est l'intérêt ?
 
Si c'est fixe alors pq avoir fait des vecteurs ?  




bon on avance un peu la merci
en fait le vecteur qui est contenu ds le vecteur a une taille fixe ca c sur (elle depassera jamais 10) et croi moi c plus simple d utilisé ce qui existe deja
merci

Reply

Marsh Posté le 03-01-2002 à 14:28:05    

Alors tu fais ca
 

Code :
  1. public Object[] createArray(Vector vector)
  2. {
  3.   Object[] arr = new Object[vector.size(), 10];
  4.   (for int i=0; i< vector.size(); i++)
  5.   {
  6.      Vector v = (Vector) vector.elementAt(i);
  7.     (for int j=0; j< v.size(); j++)   
  8.     {
  9.         arr[i,j] =  (Object) v.elementAt(j);
  10.      }
  11.   }
  12.   return arr;
  13. }


 
Tu remplace Object par le type de ton objet qu'il y a ds les vecteurs ....
 
A+


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 03-01-2002 à 14:35:13    

darklord22 a écrit a écrit :

Alors tu fais ca
 

Code :
  1. public Object[] createArray(Vector vector)
  2. {
  3.   Object[] arr = new Object[vector.size(), 10];
  4.   (for int i=0; i< vector.size(); i++)
  5.   {
  6.      Vector v = (Vector) vector.elementAt(i);
  7.     (for int j=0; j< v.size(); j++)   
  8.     {
  9.         arr[i,j] =  (Object) v.elementAt(j);
  10.      }
  11.   }
  12.   return arr;
  13. }


 
Tu remplace Object par le type de ton objet qu'il y a ds les vecteurs ....
 
A+  




il n est pas a 2 dimention ton tableau c normal?

 

[edtdd]--Message édité par veryfree--[/edtdd]

Reply

Marsh Posté le 03-01-2002 à 14:42:05    

non toi ?
 
et arr[i,j] c'est pas deux dimensions pour toi ?


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 03-01-2002 à 14:45:19    

darklord22 a écrit a écrit :

non toi ?
 
et arr[i,j] c'est pas deux dimensions pour toi ?  




excuse moi c pq on declare pas de la meme facon
j aurait mis Object[][] arr = new Object[vector.size(), 10];
et arr[i][j] je pensait pas que ca existait ce truc avant...
merci encore

Reply

Marsh Posté le 03-01-2002 à 14:45:40    

oula premiere fois de ma vie que je fais des arrays deux dimensions en Java. Bon bon je savais pas
 
Voila une version correcte
 

Code :
  1. public Object[][] createArray(Vector vector)
  2. {
  3. Object[][] arr = new Object[vector.size()][10];
  4. for (int i=0; i< vector.size(); i++)
  5. {
  6.     Vector v = (Vector) vector.elementAt(i);
  7.    for (int j=0; j< v.size(); j++)     
  8.    {
  9.        arr[i][j] =  (Object) v.elementAt(j);
  10.     }
  11. }
  12. return arr;
  13. }


 
mais bon tu aurais pu deviner que i, j c'était l'index du tableau non ?


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 03-01-2002 à 14:47:27    

Mais une question quand meme. C'est super simple à faire. Si tu sais manipuler les vecteurs, comment ca se fait que tu ne sais pas le faire toi même ?
 
C'est juste une question ...


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 03-01-2002 à 14:47:27   

Reply

Marsh Posté le 03-01-2002 à 14:50:43    

darklord22 a écrit a écrit :

Mais une question quand meme. C'est super simple à faire. Si tu sais manipuler les vecteurs, comment ca se fait que tu ne sais pas le faire toi même ?
 
C'est juste une question ...  




ben en fait je pensait qu il y avait une facon plus optimisé de faire ce truc avec la methode toArray() de la classe vecteur par ex... pq ici j ai vu des choses assez interessante et j ai beaucoup appris
sinon j avait compris que i et J etait des indice bien sur mais c vrais que ta declaration me paraissait si inhabituelle...

Reply

Marsh Posté le 03-01-2002 à 15:14:25    

veryfree a écrit a écrit :

 
ben en fait je pensait qu il y avait une facon plus optimisé de faire ce truc avec la methode toArray() de la classe vecteur par ex... pq ici j ai vu des choses assez interessante et j ai beaucoup appris
sinon j avait compris que i et J etait des indice bien sur mais c vrais que ta declaration me paraissait si inhabituelle...  




 
Tu sais. C'est pas parce que tu appelles une méthode que c'est une opération atomique. Il y a bcp de chance pour que ton opération toArray() fasse EXACTEMENT la meme chose que mon code. C'est pas parce que tu appelles une méthode que le process derrière est simple ...


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 03-01-2002 à 15:18:53    

darklord22 a écrit a écrit :

 
 
Tu sais. C'est pas parce que tu appelles une méthode que c'est une opération atomique. Il y a bcp de chance pour que ton opération toArray() fasse EXACTEMENT la meme chose que mon code. C'est pas parce que tu appelles une méthode que le process derrière est simple ...  




jdit pas que le processus est simple mais que c plus rapide(en temps d execution) d utilisé des methodes de l API

 

[edtdd]--Message édité par veryfree--[/edtdd]

Reply

Marsh Posté le 03-01-2002 à 18:03:52    

ben pas vraiment : l'API est faite en java (les sources sont dispos) => y a pas de raison que l'execution soient plus rapide ...

Reply

Marsh Posté le 04-01-2002 à 08:22:34    

benou a écrit a écrit :

ben pas vraiment : l'API est faite en java (les sources sont dispos) => y a pas de raison que l'execution soient plus rapide ...  




 
:D yes !
 
Comme je le disais, tout ca a un effet plutôt psychologique sur l'utilisateur. Moi j'ai déjà développé pas mal d'API pour d'autres développeurs et ils pensent exactement comme toi. Lorqsu'ils voient une de mes méthodes (qui envoit un packet sur un bus orienté objet) il pense que c'est atomique, simple quoi. Si il voyait tout ce qui se fait derrière pour que ca marche ...
 
On peut aller voir cette méthode toArray() si tu veux pour voir ce qu'elle fait ;)
 

Citation :


/**
 * Returns an array containing all of the elements in this Vector
 * in the correct order.
 *
 * @since 1.2
*/
public synchronized Object[] toArray() {
 Object[] result = new Object[elementCount];
 System.arraycopy(elementData, 0, result,  
                         0, elementCount);
 return result;
}


 
Par contre arraycvopy est natif donc il se peut que ce soit effectivement un poil plus rapide que ce qui t'es proposé. Mais il y a un pas entre un poil et vraiment plus rapide ...
 
C'est pas atomique alos memem si l'effet psychologique "un appel de méthode" joue un peu ...

 

[edtdd]--Message édité par darklord22--[/edtdd]


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 04-01-2002 à 09:20:06    

certes, mais dans tout les cas, lorsqu'on a le choix il vaut mieu utiliser les methodes de l4API car :
-c plus propre
-c plus lisible
-tu te fais pas chier a reecrire ce qui existe deja
-c tres souvent plus optimisé

Reply

Marsh Posté le 04-01-2002 à 10:02:59    

darklord22 a écrit a écrit :

 
 
:D yes !
 
Comme je le disais, tout ca a un effet plutôt psychologique sur l'utilisateur. Moi j'ai déjà développé pas mal d'API pour d'autres développeurs et ils pensent exactement comme toi. Lorqsu'ils voient une de mes méthodes (qui envoit un packet sur un bus orienté objet) il pense que c'est atomique, simple quoi. Si il voyait tout ce qui se fait derrière pour que ca marche ...
 
On peut aller voir cette méthode toArray() si tu veux pour voir ce qu'elle fait ;)
 

Citation :


/**
 * Returns an array containing all of the elements in this Vector
 * in the correct order.
 *
 * @since 1.2
*/
public synchronized Object[] toArray() {
 Object[] result = new Object[elementCount];
 System.arraycopy(elementData, 0, result,  
                         0, elementCount);
 return result;
}


 
Par contre arraycvopy est natif donc il se peut que ce soit effectivement un poil plus rapide que ce qui t'es proposé. Mais il y a un pas entre un poil et vraiment plus rapide ...
 
C'est pas atomique alos memem si l'effet psychologique "un appel de méthode" joue un peu ...  
 
 




merci pour tout

Reply

Marsh Posté le 04-01-2002 à 20:55:17    

(juste histoire de rajouter mon grain de sable)
 
en plus, comme la méthode est synchronized, son execution est plus lente. 3 fois plus lente en moyenne d'apres ce que m'avait dit un prof du temps de la fac (j'ai jamais vérifié ....)
 
et puis je pense que si tu cherches les performances, c'est une bonne idée d'utiliser System.arraycopy().

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed