Ce document est une réimpression du matériel créé pour les nouveaux ingénieurs il y a environ 10 ans. Certaines parties démodées telles que l'API et la syntaxe peuvent être perceptibles, mais une fois que vous avez compris l'idée, j'ai l'intention d'organiser les parties de base qui peuvent être utilisées pendant longtemps, donc j'espère que cela sera utile pour les jeunes ingénieurs maintenant.
Utilisez la classe User implémentée dans equals and hashCode. La méthode Object # toString () est remplacée pour afficher l'état de l'objet.
User.java
class User {
/** ID */
private int id;
/**Nom*/
private String name;
/**
*C'est un constructeur.
*
* @param id ID
* @nom du paramètre nom
*/
public User(int id, String name) {
this.id = id;
this.name = name;
}
// (Abréviation)getter etc.
/**
*Renvoie la valeur de hachage de cette classe.
*
* @renvoie la valeur de hachage de cette classe
*/
public int hashCode() {
return this.id * 13;
}
/**
*L'instance de cette classe et l'objet passé en argument
*Renvoie vrai s'ils sont égaux.
*L'objet passé en argument est une instance de la classe User
*Si les valeurs id sont égales, elles sont considérées comme égales.
*
* @Vrai si l'objet passé dans l'argument de retour est une instance de la classe User et que les identifiants sont égaux.
*/
public boolean equals(Object other) {
if (this == other) { //Vrai si l'objet passé dans l'argument était cet objet lui-même
return true;
}
if (!(other instanceof User)) { //L'objet passé en argument est un objet de la classe User
return false; //Faux sinon.
}
User otherUser = (User) other;
if (this.id == otherUser.getId()) { //Comparez les valeurs d'ID, vrai si égal, faux si différent.
return true;
}
return false;
}
/**
*Une représentation sous forme de chaîne d'une instance de cette classe.
*
* @return Une représentation sous forme de chaîne d'une instance de cette classe.
*/
public String toString() {
return "User : id = " + id + " name = " + name;
}
}
--Garantit l'ordre dans lequel les éléments sont ajoutés. En d'autres termes, vous pouvez obtenir les éléments en spécifiant l'index dans l'ordre de add ().
Jugez l'équivalence en fonction de la valeur de l'id (retourne true si les valeurs de l'id sont égales dans la méthode equals) Ajoutez une instance de la classe User à ArrayList comme indiqué ci-dessous et affichez l'élément ajouté en tant que sortie standard sous forme de chaîne de caractères. Alors ...
User user1 = new User(1, "Maekawa");
User user2 = new User(2, "Suzuki");
User user3 = new User(3, "Maekawa");
User user4 = new User(1, "Sato"); //L'ID est dupliqué avec l'utilisateur1
List userList = new ArrayList();
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
for (Iterator userIter = userList.iterator(); userIter.hasNext(); ) {
User user = (User) userIter.next();
System.out.println("Utilisateur dans userList: " + user); //Sortie du contenu de l'appel de la méthode toString
}
Le résultat de sortie est le suivant. Il est produit dans l'ordre dans lequel les éléments sont ajoutés et les éléments en double sont conservés.
*****************************************
Utilisateur dans userList: User : id = 1 name =Maekawa
Utilisateur dans userList: User : id = 2 name =Suzuki
Utilisateur dans userList: User : id = 3 name =Maekawa
Utilisateur dans userList: User : id = 1 name =Sato
*****************************************
Jugez l'équivalence en fonction de la valeur de l'id (retourne true si les valeurs de l'id sont égales dans la méthode equals) Ajoutez une instance de la classe User à HashSet comme indiqué ci-dessous et affichez l'élément ajouté en tant que sortie standard sous forme de chaîne de caractères. Alors ...
User user1 = new User(1, "Maekawa");
User user2 = new User(2, "Suzuki");
User user3 = new User(3, "Maekawa");
User user4 = new User(1, "Sato"); //L'ID est dupliqué avec l'utilisateur1
Set userSet = new HashSet();
userSet.add(user1);
userSet.add(user2);
userSet.add(user3);
userSet.add(user4);
for (Iterator userIter = userSet.iterator(); userIter.hasNext(); ) {
User user = (User) userIter.next();
System.out.println("Utilisateur dans userSet: " + user); //Sortie du contenu de l'appel de la méthode toString
}
Le résultat de sortie est le suivant. Il n'est pas émis (non garanti) dans l'ordre dans lequel les éléments sont ajoutés et les éléments en double ne sont pas conservés.
*****************************************
Utilisateur dans userSet: User : id = 3 name =Maekawa
Utilisateur dans userSet: User : id = 2 name =Suzuki
Utilisateur dans userSet: User : id = 1 name =Maekawa
*****************************************
En premier lieu, "Set" en Java est une expression abstraite du concept de Set en mathématiques.
Chaque élément contenu dans un ensemble est unique.
Autrement dit, les éléments contenus dans le même ensemble ne peuvent pas être considérés comme identiques (valeur égale).
Exprimer cela en Java
Il n'a pas de paire d'éléments e1 et e2 qui est e1.equals (e2). Peut être exprimé comme. Dans une collection telle que Set ou List en Java, les «éléments qui se chevauchent» ne sont rien d'autre que des éléments multiples qui renvoient true comme valeur de retour lors de la comparaison de deux éléments (objets) avec la méthode equals.
Puisque la méthode equals doit être implémentée par le programmeur (sauf si vous utilisez la méthode equals par défaut définie dans la classe Object), les règles pour les objets "dupliqués" en Java varient en fonction des règles métier de l'application et de l'implémentation du programmeur. Cela signifie qu'il peut être défini par la méthode.
Dans l'exemple précédent, l'équivalence de l'instance de classe User était jugée par la valeur de "ID".
Que se passe-t-il lorsqu'une instance de la classe User est ajoutée à l'ensemble si elle est implémentée de telle sorte que l'équivalence de l'instance de la classe User est jugée par la valeur de "nom"?
User.java
//Exemple d'implémentation de la classe User qui juge l'équivalence par la valeur du nom
// (Cependant, pour des raisons pratiques, null n'est pas stocké dans la valeur de nom.)
/**
*Renvoie la valeur de hachage de cette classe.
*
* @renvoie la valeur de hachage de cette classe
*/
public int hashCode() {
return this.name.hashCode();
}
/**
*L'instance de cette classe et l'objet passé en argument
*Renvoie vrai s'ils sont égaux.
*L'objet passé en argument est une instance de la classe User
*Si les valeurs de name sont égales, elles sont considérées comme égales.
*
* @True si l'objet passé dans l'argument de retour est une instance de la classe User et que les noms sont égaux.
*/
public boolean equals(Object other) {
if (this == other) { //Vrai si l'objet passé dans l'argument était cet objet lui-même
return true;
}
if (!(other instanceof User)) { //L'objet passé en argument est un objet de la classe User
return false; //Faux sinon.
}
User otherUser = (User) other;
if (this.name.equals(otherUser.getName())) { //Comparez les valeurs de name, true si égal, false sinon égal. Retourner vrai;
}
return false;
}
Jugez l'équivalence par la valeur de name (retournez true si les valeurs id sont égales dans la méthode equals) Ajoutez une instance de la classe User à HashSet comme indiqué ci-dessous et affichez l'élément ajouté en tant que sortie standard sous forme de chaîne de caractères. Alors ...
*****************************************
Utilisateur dans userSet: User : id = 1 name =Sato
Utilisateur dans userSet: User : id = 2 name =Suzuki
Utilisateur dans userSet: User : id = 1 name =Maekawa
*****************************************
Vérifiez s'il vous plaît
Recommended Posts