Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trier des objets d'apres l'ordre d'un tableau d'objet

4 réponses
Avatar
deja
bonjour,
J'ai un probleme algorithmique assez pénible.

J'ai d'un coté un tableau d'objet dont l'ordre est important.

J'ai d'un autre coté, un tableau d'un sous ensemble de ces objets dans
le désordre.

J'aimerais ranger ce deuxième tableau dans le même ordre que le
premier.

Comment faire ?

par exemple :

Le premier tableau contient :
Choucroute
Betterave
Navet
Orange
Poire
Chocolat

Le deuxieme contient :
Poire
Navet
Chocolat

Je veux qu'à la fin, il me retourne un tableau avec dans l'ordre :
Navet
Poire
Chocolat

Sachant que les tableaux sont assez volumineux et que je prefererais
trouver une astuce avec des keymap ou des trucs comme ça... mai j'ai
aucune idée de comment faire.

merci,

Axel

4 réponses

Avatar
Unknown
J'ai d'un coté un tableau d'objet dont l'ordre est important.
J'ai d'un autre coté, un tableau d'un sous ensemble de ces objets dans
le désordre.


SI tes objets on "implements Comparable" et que tu as bien surchargé la
méthode compareTo(..) pour faire ce que tu veux, alors tu as :
java.util.Collections.sort(List list);
tu lui passe ton objet List et il te le trie.

Avatar
Bernard Koninckx
Je pense que tes objets doivent implémenter l'interface java.util.Comparator
et de ce fait définit les fonctions equals et compare.

Tu peux dès lors trier ton tableau de la manière suivante
Arrays.sort(tableau d'objets)
ou Arrays.sort(tableau d'objets, objet comparator)

En espérant ne pas m'être trop fourvoyé (je suis débutant) et t'avoir donné
la réponse qu tu rechrche , ou du moins un début de piste.
Bernard

"Axel R." a écrit dans le message de news:

bonjour,
J'ai un probleme algorithmique assez pénible.

J'ai d'un coté un tableau d'objet dont l'ordre est important.

J'ai d'un autre coté, un tableau d'un sous ensemble de ces objets dans
le désordre.

J'aimerais ranger ce deuxième tableau dans le même ordre que le
premier.

Comment faire ?

par exemple :

Le premier tableau contient :
Choucroute
Betterave
Navet
Orange
Poire
Chocolat

Le deuxieme contient :
Poire
Navet
Chocolat

Je veux qu'à la fin, il me retourne un tableau avec dans l'ordre :
Navet
Poire
Chocolat

Sachant que les tableaux sont assez volumineux et que je prefererais
trouver une astuce avec des keymap ou des trucs comme ça... mai j'ai
aucune idée de comment faire.

merci,

Axel


Avatar
Nicolas Delsaux
Le 18.05 2004, Axel R. s'est levé(e) et s'est dit "tiens, si j'écrivais aux
mecs de fr.comp.lang.java"

bonjour,
J'ai un probleme algorithmique assez pénible.

J'ai d'un coté un tableau d'objet dont l'ordre est important.


Est-ce que tes objets sont naturellement ordonnées (ie on peut leur faire
correspondre une relation d'ordre total, c'est-à-dire être capable
d'exprimer pour n'importe quel couple d'objet a,b une relation a<b) ? Si
c'est le cas, fais-leur implémenter l'interface Comparable, qui permettra
de les placer, par exemple, dans un TreeSet dans lequel ils seront
naturellement ordonnés.

Sachant que les tableaux sont assez volumineux et que je prefererais
trouver une astuce avec des keymap ou des trucs comme ça... mai j'ai
aucune idée de comment faire.


Si un ordre total n'existe pas (et au vu de ton exemple j'imagine que c'est
le cas) tu n'es pas perdu. Tu peux définir dans la classe ordonnant tes
"petits" conteneurs un Comparator utilisant l'ordre défini dans le "gros"
conteneur.

merci,

Axel



--
Nicolas Delsaux
"Dans l'espace, personne ne vous entend crier"
Alien, le 8ème passager

Avatar
Bruno Jouhier
Le problème est d'écrire une fonction qui te permette de comparer les objets
de ton 2nd tableau efficacement, et bien sûr je suppose que l'ordre qui
t'intéresse n'est pas un ordre "naturel" (lexicographique par exemple) mais
un ordre arbitraire (c'est ce que ton exemple laisse entendre).

Dans ce cas, il faudrait pouvoir associer l'index dans le tableau de
référence aux éléments de ce tableau. Si tes éléments sont des objets, tu
peux peut-être leur ajouter un champ sortIndex que tu initialise en
parcourant le tableau. Sinon, si tes éléments sont de simples strings, tu
peux créer une hashtable indexée par les strings et contenant les index (tu
es obligé d'allouer un java.lang.Integer pour chaque entrée).

Ensuite, il suffit d'implémenter un fonction de comparaison qui fait un
lookup dans la hashtable et qui compare les index. Et d'utiliser cette
fonction avec un algo de tri standard (QuickSort par ex) sur le 2nd tableau.

Bruno.

"Axel R." a écrit dans le message de
news:
bonjour,
J'ai un probleme algorithmique assez pénible.

J'ai d'un coté un tableau d'objet dont l'ordre est important.

J'ai d'un autre coté, un tableau d'un sous ensemble de ces objets dans
le désordre.

J'aimerais ranger ce deuxième tableau dans le même ordre que le
premier.

Comment faire ?

par exemple :

Le premier tableau contient :
Choucroute
Betterave
Navet
Orange
Poire
Chocolat

Le deuxieme contient :
Poire
Navet
Chocolat

Je veux qu'à la fin, il me retourne un tableau avec dans l'ordre :
Navet
Poire
Chocolat

Sachant que les tableaux sont assez volumineux et que je prefererais
trouver une astuce avec des keymap ou des trucs comme ça... mai j'ai
aucune idée de comment faire.

merci,

Axel