A voir également:
- Trier des instances de classe
- Excel trier par ordre croissant chiffre - Guide
- Retrouver photo de classe gratuitement ✓ - Forum Vos droits sur internet
- Excel trier par date ne fonctionne pas ✓ - Forum Excel
- Application gratuite pour trier les photos - Guide
- Retrouver la liste des élèves d'une classe - Forum Réseaux sociaux
3 réponses
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 225
5 août 2013 à 22:58
5 août 2013 à 22:58
Salut,
pour trier les objets sans se casser la tête et pouvoir utiliser les méthodes standard, il faut que la classe implémente l'interface Comparable<>:
Pour le problème de la fonction cloner() -- qui par ailleurs par convention devrait s'appeler clone(), être un @Override de clone() de l'interface Clonable que Participante devrait implémenter, et ne rien faire d'autre que de cloner et renvoyer le clone --, "ch" n'est défini nulle part.
Il faut donc le définir:
Pour pousser loin un détail va nous géner: Java ne pourra pas libérer la mémoire des objets Concour et les Participantes associés, car il y aura une référence cyclique: le Concour dépend des Participantes, et les Participantes dépendent du Concour; l'utilisation d'une WeakReference<Concour> s'imposera:
pour trier les objets sans se casser la tête et pouvoir utiliser les méthodes standard, il faut que la classe implémente l'interface Comparable<>:
class Participante implements Comparable<Participante> { ... public int compareTo(Participante autreParticipante) { return nom.compareTo(autreParticipante.nom); }Le tri devient donc plus que simple, et adieu la fonction Trie(nom), remplacée alors par ceci:
Arrays.sort(tab);dans les fonctions Inscrire().
Pour le problème de la fonction cloner() -- qui par ailleurs par convention devrait s'appeler clone(), être un @Override de clone() de l'interface Clonable que Participante devrait implémenter, et ne rien faire d'autre que de cloner et renvoyer le clone --, "ch" n'est défini nulle part.
Il faut donc le définir:
Concour ch; Participante(String nom, Concour ch) { this.ch = ch; ...
Pour pousser loin un détail va nous géner: Java ne pourra pas libérer la mémoire des objets Concour et les Participantes associés, car il y aura une référence cyclique: le Concour dépend des Participantes, et les Participantes dépendent du Concour; l'utilisation d'une WeakReference<Concour> s'imposera:
WeakReference<Concour> ch; Participante(String nom, Concour ch) { this.ch = new WeakReference<Concour>(ch); ... public void cloner() { if (ch != null && ch.get() != null) ch.get().Inscrire( new Participante(this.nom, this.ecole)); }
Merci beaucoup de toute ces explication. Ces une question (une seul des question.. ) de mon examen de java de juin. On n'a pas vu l'interface comparable et le weakreference :( Y a t'il une méthode moins optimiser, ou plus tordu qui me laisserai dans le cadre du cour. Pas que je ne veux pas apprendre mais je me vois mal replacer tout cela dans un prochain examen ^^'
encore merci
encore merci
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 225
6 août 2013 à 11:32
6 août 2013 à 11:32
Pour le WeakReference<T> c'est quelque chose d'assez avancé, bien que simple dans son principe. Oublie-la, je l'ai mis surtout si d'autres personnes qui codent en Java lisent le post.
En revanche je suis étonné que tu n'aies pas vu l'interface Comparable<T>, qui pourtant est plus qu'importante quand on veut faire un tri, et niveau optimisation rapidité et lisibilité y'a pas vraiment mieux.
Car implémenter soi-même un algorithme de tri (en général de complexité O(n log n)) n'est pas toujours une mince affaire; alors autant profiter à fond de ce que Java nous offre.
En revanche je suis étonné que tu n'aies pas vu l'interface Comparable<T>, qui pourtant est plus qu'importante quand on veut faire un tri, et niveau optimisation rapidité et lisibilité y'a pas vraiment mieux.
Car implémenter soi-même un algorithme de tri (en général de complexité O(n log n)) n'est pas toujours une mince affaire; alors autant profiter à fond de ce que Java nous offre.
Je viens de modifier cloner et ajouter un constructeur dans concour:
Par contre eclipse me signale une erreur pour les 2 paramètre de Inscrire à savoir nom et ecole. Comment je dois faire?
Concour ch; public void cloner() { ch.Inscrire( new Participante(this.nom, this.ecole)); }
public void Inscrire(Participante p) { tab[nbInscrit] = new Participante(nom, ecole); nbInscrit++; Trie(nom); Complet(); }
Par contre eclipse me signale une erreur pour les 2 paramètre de Inscrire à savoir nom et ecole. Comment je dois faire?