Certaines collections d'objets nécessitent l'utilisation de classes dont les instances sont comparables pour pouvoir trier la collection. De plus, pour utiliser une instance d'une classe comme clé dans les tables associatives, la classe doit posséder des propriétés supplémentaires.
Objets comparables.
Pour utiliser un objet dans une collection triée, on peut :
interface codice_1.
Une classe implémente l'interface codice_2 en ajoutant la méthode suivante :
int compareTo(Object o)
ou (Java 5+) interface codice_3 :
int compareTo(T o)
Dans cette méthode l'objet codice_4 est comparé à l'objet codice_5. Cette méthode doit retourner le signe de la soustraction virtuelle codice_6. C'est à dire :
Cette méthode doit avoir les propriétés suivantes, pour toutes instances de la classe nommées codice_10, codice_11 et codice_12 :
De plus, pour utiliser une instance de la classe dans une collection, le comportement de cette méthode doit être consistant avec celle de la méthode codice_18 :
Comparateur (codice_25).
L'interface codice_26 permet de rendre comparable des instances dont la classe n'implémente pas elle-même l'interface codice_2 vue précédemment.
Une classe implémentant cette interface doit déclarer deux méthodes :
int compare(Object o1, Object o2)
int equals(Object o)
ou (Java 5+) interface codice_28 :
int compare(T o1, T o2)
int equals(Object o)
La méthode codice_18 compare les comparateurs (eux-mêmes) codice_4 et codice_5.
La méthode codice_32 compare les deux objets spécifiés et retourne le signe de la soustraction virtuelle codice_33, comme expliqué dans la section précédente. C'est-à-dire :
Clé de table associative.
Pour utiliser une instance de classe comme clé d'une table associative ("Map" en anglais), la classe doit posséder les propriétés suivantes :
Dans le cas contraire (par défaut), il est toujours possible d'utiliser des instances de la classe comme clé, mais il faudra utiliser cette instance seulement. C'est à dire que pour retrouver une valeur dans une table associative, il ne sera pas possible d'utiliser une autre instance dont les attributs sont égaux à ceux de l'instance utilisée pour réaliser l'association.
Une énumération ayant des instances prédéterminées et ne pouvant avoir d'autres instances convient donc pour être utilisée comme clé.
Exemple : un tableau d'entiers utilisé comme clé.
int[] key1 = { 1, 2 };
int[] key2 = { 1, 2 }; // même contenu que key1
HashMap hmap = new HashMap();
// association key1 -> chaîne de caractère
hmap.put(key1, "Valeur pour la suite (1,2)");
// tentative pour retrouver la valeur
String s1 = (String)hmap.get(key1); // retourne "Valeur pour la suite (1,2)"
// tentative pour retrouver la valeur
String s2 = (String)hmap.get(key2); // retourne null
La tentative échoue car un tableau n'a pas toutes les propriétés nécessaires. La méthode codice_18 est correcte, mais la méthode codice_38 retourne deux valeurs différentes.
Méthode equals.
Une classe doit implémenter la méthode codice_18 de manière cohérente, c’est-à-dire, pour toutes instances de la classe nommées codice_10, codice_11 et codice_12 :
Méthode hashCode.
Pour utiliser une classe comme clé d'une table associative, il faut que la classe implémente la méthode codice_50 de manière cohérente. Pour comprendre cela, il faut aborder le fonctionnement interne des tables associatives indexée par des objets :
Il est donc essentiel que la méthode codice_38 ait les propriétés suivantes :
La méthode par défaut retourne la même valeur que la méthode codice_62 qui se base sur la référence de l'objet (0 si la référence est codice_23).
C'est à dire que deux objets différents mais avec des contenus identiques auront tout de même une valeur différente.
Objets utilisables comme clé.
Comme expliqué dans la section d'introduction, il est possible d'utiliser n'importe quel type d'objet à condition d'utiliser exactement la même instance, ou bien que la classe possède des méthodes codice_18 et codice_38 cohérentes, comme la classe codice_66 par exemple.
String key1 = "Clé de test";
String key2 = "Clé" + " de " + "test";
HashMap hmap = new HashMap();
// association key1 -> chaîne de caractère
hmap.put(key1, "Valeur pour la clé");
// tentative pour retrouver la valeur
String s1 = (String)hmap.get(key1); // retourne "Valeur pour la clé"
// tentative pour retrouver la valeur
String s2 = (String)hmap.get(key2); // retourne "Valeur pour la clé"

Pour lire Platon/Guide des dialogues/Ion

Introduction.
Ce dialogue met en scène Ion et Socrate. Ce dernier interroge son interlocuteur à propos de l'art du rhapsode qui semble demander de vastes connaissances. Mais Ion est incapable de justifier sa compétence d'interprète. Dépourvu de science, il est donc inspiré par les dieux.
Ce dialogue se moque des poètes, et son style comique, voire grotesque, peut donner l'impression qu'il n'y a là rien de très sérieux. Cependant, la lecture de ce dialogue en parallèle avec la dernière partie du " Ménon" permet de mieux saisir la portée philosophique du "Ion".
Il n'est pas certain que Socrate soit complètement ironique quand il développe l'idée d'une inspiration divine. Si cette idée fait passer Ion pour un ignorant, c'est surtout la prétention de ce dernier qui prête à rire : il ne sait pas qu'il ne sait rien et se ridiculise. En revanche, l'ignorance n'invalide pas son art et l'exercice correct de cet art.
Dans le "Ménon", Socrate explique en effet que la vertu n'est pas seulement connaissance, mais également opinion droite. Or, celui qui possède une opinion droite ne peut la justifier, mais agit et pense pourtant droitement. Sans l'opinion droite, la vertu serait presque impossible et il serait très difficile de l'enseigner et de trouver des maîtres de vertu. Dans le cas du "Ion", si une connaissance justifiée est requise pour être un rhapsode, il serait difficile d'expliquer l'existence de cet art. Bien que le "Ion" ne l'explicite pas, on peut donc, à la lumière du "Ménon", penser que Platon soutient sérieusement que l'art est d'inspiration divine et que cette thèse ne doit pas passer pour un élément comique visant uniquement à discréditer Ion.
Texte et commentaire.
Nous ne savons rien de Ion en dehors de ce que nous dit Platon dans ce dialogue. Il est décrit comme un célèbre rhapsode qui exerce son activité à des fins pécuniaires.
Éphèse : « l'une des plus anciennes et des plus importantes cités grecques d'Asie Mineure, la première de Ionie. »
Épidaure :
Fêtes d'Asclèpios :
Rhapsode :

Blender 3D/Importer des fichiers Blender