Trier un tableau a DEUX dimensions ! - Java - Programmation
Marsh Posté le 02-11-2002 à 02:16:52
benh deja tu peux pas utiliser un array a 2 dimension car tes deux colones sont pas du même type.
Donc tu fé deux array a une dimension de la même taille et c bon.
et pi tu trie le premier, et a chaque fois que tu bouges les elements du premier tableau colonne A[j]=A[i] et bien tu fais pareil avec l'autre B[j]=B[i] .
Wouala
Marsh Posté le 02-11-2002 à 02:21:52
désolé j'avais pas vu que c'etait du JAVA sous koi tu developpait, je croyais que c'etait pascal .
Donc c ptetre possible de faire des tableaux avec des cellules pas du même type.
Marsh Posté le 02-11-2002 à 03:33:17
java.util.Arrays.sort avec le comparator qui va bien :
Code :
|
Marsh Posté le 02-11-2002 à 09:35:48
benou >>>
Marsh Posté le 02-11-2002 à 15:32:15
benou a écrit a écrit : java.util.Arrays.sort avec le comparator qui va bien :
|
Merci bien, je ne comprenais pas vraiment comment marchais le Comparator maintenant un peu mieux
Merci bien ca fonctionne du tonnerre
Mais un nouveau probleme se pose
je voudrais maintenant la meme chose mais avec 3 composantes
blabla bla 1
zlizli bli 2
ploplo blo 3
et le trie pourra se faire sur soit la 1ere soit la 2nde composante, jai vraiment reflechit mais je ne sais pas comment m'y prendre
merci
Marsh Posté le 02-11-2002 à 19:13:41
casquetta a écrit a écrit : Merci bien, je ne comprenais pas vraiment comment marchais le Comparator maintenant un peu mieux Merci bien ca fonctionne du tonnerre Mais un nouveau probleme se pose je voudrais maintenant la meme chose mais avec 3 composantes blabla bla 1 zlizli bli 2 ploplo blo 3 et le trie pourra se faire sur soit la 1ere soit la 2nde composante, jai vraiment reflechit mais je ne sais pas comment m'y prendre merci |
Là, t'as le code pour trier sur le 1er élément de ton tableau (cf la méthode donnée par Benou):
Code :
|
Si tu veux disposer d'un tableau à 3 éléments et trier un coup sur le 1er, tu utilises la classe AlphaComparator, pour trier sur le second élément, tu crées une nouvelle classe semblable à AlphaComparator (ci-dessous)
Code :
|
[Indice 1 pour le second élement au lieu de indice 0]
Puis t'indiques dynamiquement au moment de l'exécution quel Comparator utiliser pour ton tri en passant par une méthode actionPerformed()...
Marsh Posté le 02-11-2002 à 21:35:24
MachinBidule a écrit a écrit : Là, t'as le code pour trier sur le 1er élément de ton tableau (cf la méthode donnée par Benou):
|
merci beaucoup
c'etait tellement bete lol
franchement merci a tous, votre aide m'a été tres precieuse !
Marsh Posté le 02-11-2002 à 22:33:28
tiens une question :
actuellement je travaille avec un tableau fixe de ce type :
Object[][]tName = {
{"blabla", new Integer(0),"roror"},
{"plapla", new Integer(1),"pouet"},
{"kilki", new Integer(2),"copoo"},
};
mais j'aimerais modifier cette structure afin que je puisse travailler sur quelquechose de dynamique, que je puisse ajouté des entrés et en supprimer comme je le veut
vous me conseillez quoi ?
tout en gardant bien sur la possibilité davoir plusieurs dimensions car j'en ai besoin !
merci
Marsh Posté le 02-11-2002 à 23:46:14
une solution un peu plus élégante que de faire une nouvelle classe pour trier sur une autre colone : passer en paramètre au comparator la colone sur laquelle trier :
Code :
|
Marsh Posté le 02-11-2002 à 23:50:38
merci benou
et tu aurais pas une idée pour mon second probleme car je bloque carrément la
je voudrais la meme chose que cette structure mais en dynamique, afin de pouvoir ajouté, retiré des elements !
jarrive pas et je seche completement la !
merci davance
Marsh Posté le 02-11-2002 à 23:51:38
casquetta a écrit a écrit : mais j'aimerais modifier cette structure afin que je puisse travailler sur quelquechose de dynamique, que je puisse ajouté des entrés et en supprimer comme je le veut |
ben ca dépend de ce que tu veux avoir ...
actuellement les éléments de ton tableau sont des tableaux qui ont tous la même taille. C'est toujours le cas ?
si oui, pkoi est ce que tu n'écrit pas un obket qui contient ces données (2 string et un int). Ensuite, tu n'as plus qu'à déclarer une List (Vector ou mieux ArrayList) et tu pourras ajouer ou supprimer autant d'éléments que tu veux ...
si tes données ne sont pas de taille fixe, tu peux toujours utiliser des List de tableaux ou des List de List mais c'est pas très très beau ... à moins que ca correspondent bien à la nature de tes données
Marsh Posté le 02-11-2002 à 23:53:54
si tu parts sur les list, tu peux utiliser la méthode java.util.Collections.sort() pour trier tes List.
Marsh Posté le 02-11-2002 à 23:55:06
bah ce que je veut faire c que la j'ai ca :
Code :
|
c pouvoir ajouter des lignes afin davoir par exemple
Code :
|
et pouvoir en retirer mais la je comprend pas ce que tu veut me dire.... désolé de mon ignorance
ps : le tri fonctione exactement comme je le veut, ce que je veut maintenant c avoir une structure dynamique mais qui est la meme guelle koi
Marsh Posté le 03-11-2002 à 00:19:15
un exemple en définissant un objet pour stocker tes données :
Code :
|
Code :
|
Marsh Posté le 03-11-2002 à 00:38:18
ok merci beaucoup de ton aide, je commence un peu a capter le truc
et donc par exemple est ce que je peut ecrire :
(tableau.get(2)).getI() ?
Afin de recuperer la valeur de i de l'element situé a la position 2 du tableau ?
Marsh Posté le 03-11-2002 à 00:41:32
oui mais il faut que tu castes l'objet :
((Data) tableau.get(2)).getI()
Marsh Posté le 03-11-2002 à 12:45:45
benou a écrit a écrit : oui mais il faut que tu castes l'objet : ((Data) tableau.get(2)).getI() |
jen etais sur !
Merci beaucoup benou, tu m'a beaucoup appris en lespace de ce topic
je continue mon boulot et si j'ai un pepin, jreviens lol
merci encore
Marsh Posté le 13-09-2004 à 09:59:05
Vous assurez les gars! C'est exactement ce que je cherchais ! Merci benou! Et casquetta pour le post .
@++
Marsh Posté le 13-09-2004 à 12:10:51
Je me suis posé une question en lisant ce topic sur quelle méthode est la plus efficace au niveau performance :
Lorsqu'on insere un objet dans un tableau (ou arrayList) déjà trié, est ce qu'il vaut mieux trouver la position à laquel il faut insérer le nouvel objet et l'ajouter directement à la bonne position, ou l'ajouter à la fin et faire un sort, ou si ca revient au même ?
Marsh Posté le 14-09-2004 à 00:04:44
patachou a écrit : Je me suis posé une question en lisant ce topic sur quelle méthode est la plus efficace au niveau performance : |
Insérer un élément dans un tableau trié est une opération vachement couteuse, non seulement en temps d'exécution, mais également en code ! Tu imagines toute la plomberie à ré-écrire ?
Si tu dois ajouter plusieurs éléments avant d'utiliser la collection en question, mieux vaut ne trier qu'à la fin, plutôt que de déclencher un tri à chaque insertion.
Une LinkedList est sans doute mieux adaptée qu'un ArrayList pour ce genre d'opérations.
Marsh Posté le 14-09-2004 à 12:12:13
Moi j'ai besoin d'avoir une liste toujours triée après chaque insertion, donc il vaudrait mieux utiliser une LinkedList et faire un sort après chaque insertion ?
Marsh Posté le 14-09-2004 à 13:49:08
ReplyMarsh Posté le 14-09-2004 à 13:59:03
Oui mais une linkedList est une liste, donc on peut la trier... Moi tout ce que je voulais savoir c'etait de connaitre une bonne facon pour garder une liste (ou autre) triée...
sircam me disait qu'une linkedList serai plus approprié qu'un ArrayList (sans doute pour l'insertion...) mais je voulais en savoir plus histoire d'éviter de faire du code tout pourave comme j'arrive bien à faire...
Marsh Posté le 14-09-2004 à 14:00:37
bah ArrayList ou LinkedList, au niveau de ton code, ça ferait pas de difference, tu devras trier à chaque fois "à la main".
Marsh Posté le 14-09-2004 à 14:29:21
Si tu dois avoir une liste triée tout le temps, l'insertion "en bonne place", avec un algo bien pensé, sera sans doute plus efficace que le "retri" après chaque insertion.
Enfin, ça dépend de l'algo de tri utilisé : y'en a qui sont très rapides si la source est "presque triée", ce qui est ton cas, puisque tu ajoutes un élément à un ensemble déjà trié,mais y'en a qui s'en tirent moins bien.
Sinon, tu peux utiliser un TreeSet, qui implémente SortedSet.
Marsh Posté le 14-09-2004 à 15:56:39
J'arrive pas à croire qu'il faudrait ré-écrire de la "plomberie" pour manipuler une structure de données basique comme la liste...
L'interface List fournit une méthode add(int, Object) qui permet d'insérer un élément à un endroit donné dans la liste, en décalant tous les éléments suivants.
Ton boulot consiste alors à insérer au bon endroit. Ta liste étant par définition déjà triée avant insertion, tu peux utiliser une recherche dichotomique pour déterminer l'endroit où l'insertion aura lieu.
Mais là encore, le choix ArrayList ou LinkedList aura une influence. Si l'insertion à proprement parler est plus rapide avec LinkedList, il ne faut perdre de vue que l'essentiel de ton boulot d'insertion est d'accéder à la liste (lors de la recherche).
Mais pq se casser le tronc, alors qu'il y a Collections.binarySearch ? Si l'élément n'est pas présent, cette méthode te renvoie l'endroit où l'élément devrait être inséré (la liste DOIT être triée avant appel).
Enfin, le TreeSet est sympa, mais Set n'autorise pas les doublons.
Marsh Posté le 14-09-2004 à 18:32:12
Merci pour vos réponses, j'ai testé le binarySearch qui marche très bien sur un petit exemple et je pense que je vais me servir de ça plutot que de recoder un truc qui ferrai pareil (surtout que j'ai pas besoin de perf énorme, et que je suis pas sur de pouvoir faire mieux ).
Marsh Posté le 02-11-2002 à 01:55:29
Imaginez un tableau a 2 dimensions comme suit :
blabla 1
zlizli 2
ploplo 3
on a X lignes et 2 collones
Maintenant je veut le trier de tel maniere que la premiere collone se trie par ordre alphabetique et que la seconde collone associé reste avec cela donnerais :
blabla 1
ploplo 3
zlizli 2
comment je peut faire ? avez vous une idée ?
thx